none
Configuração padrão para uso do WCF RRS feed

  • Pergunta

  • Bom dia,

    Pelo título percebe-se que estou iniciando com o WCF, hehehehehe.
    Criei uma solução com o VS2008 que esta sendo utilizado Wcf e Silverlight com o nome "ExemploWcf", onde adicionei os projetos "WcfService", UiSilverlight e UiSilverlight.Web.
    Como pode notar trata-se de um exemplo simples, veja a seguir:


    WcfService

    namespace

     

    WcfService
    {
        public class Service1 : IService1
        {
            public string GetHello()
            {
                return string.Format("Alô Mundo !!!");
            }
        }
    }




    UiSilvelright (Client)


    namespace

     

    UiSilverlight
    {
        public partial class MainPage : UserControl
        {

            public MainPage()
            {
                InitializeComponent();
            }

            private
    void Button_Click(object sender, RoutedEventArgs e)
            {
                var proxy = new Service1Client();
                proxy.GetHelloCompleted +=
    new EventHandler<GetHelloCompletedEventArgs>(proxy_GetHelloCompleted);
                proxy.GetHelloAsync();
            }

            private void
    proxy_GetHelloCompleted(object sender, GetHelloCompletedEventArgs e)
            {
                if (e.Error == null)
                {
                    this.txtHello.Text = e.Result.ToString();
                }
                else
                {
                    MessageBox.Show(e.Error.Message.ToString() + "\n------------------------------------\n" + e.Error.InnerException.ToString());
                }
            }

        }
    }


    Vamos aos acontecimentos e as minhas dúvidas:

    1) Quando eu compilo e executo esta aplicação o seu funcionamento é perfeito, ou seja, clico no botão e recebo a mensagem "Alô Mundo !!!" prefeitamente. O SO do meu computador é o Windows Vista, noto que no rodapé da tela (barra), ao lado do relógio, é exibido um ícone "ASP.NET Development Server -  Runs ASP.NET Application locally".

    2) Publiquei o projeto "UiSilverlight.Web" no IIS, utilizando o próprio VS 2008 da seguinte forma: No Solution Explorer selecionei o projeto UiSilverlight.Web e com o botão direito do mouse escolh a opção Publish, dai para frente segui as informações da tela.

    3) Copiei os arquivos "clientaccesspolicy" e "crossdomain" em todas as pastas.

    4) No browse (IE8) digitei o endereço http://localhost/global/default.aspx a minha pagina foi exibida normalmente, clicando no botão a mensagem "Alô Numdo !!!" é exibida somente se o ícone ao lado do relógio esta ativo, caso eu desative o ícone é exibido a seguinte mensagem:

    "An error occurred while to make a request to URI 'http://localhost:50683/Service.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute. Please see the inner exception for more details."

    4) Pegunto, tenho que fazer alguma configuração para poder executar esta aplicação sem ser pelo VS2008 ?

    5) Para eu hospedar esta aplicação na Locaweb, terei que fazer alguma ou configuração tambem ?

    6) O que eu quero é saber os macetes para poder publicar uma aplicação com WCF.


    obrigado,


    Roberto

    segunda-feira, 28 de setembro de 2009 12:22

Respostas

  • Boas Roberto,

    Quando você referencia o serviço na sua aplicação cliente, ele armazena no arquivo de configuração a URL até o serviço. Sendo assim, quando você levou a aplicação até o IIS, você deve ter esquecido de alterar isso.

    Abra o arquivo Web.config da sua aplicação e veja lá se encontra esse endereço. Ao invés de ter http://localhost:50683/Service.svc, defina http://localhost/global/Service.svc.
    http://www.israelaece.com
    • Marcado como Resposta RobertoDaSilva segunda-feira, 28 de setembro de 2009 21:06
    segunda-feira, 28 de setembro de 2009 13:45
    Moderador

Todas as Respostas

  • Boas Roberto,

    Quando você referencia o serviço na sua aplicação cliente, ele armazena no arquivo de configuração a URL até o serviço. Sendo assim, quando você levou a aplicação até o IIS, você deve ter esquecido de alterar isso.

    Abra o arquivo Web.config da sua aplicação e veja lá se encontra esse endereço. Ao invés de ter http://localhost:50683/Service.svc, defina http://localhost/global/Service.svc.
    http://www.israelaece.com
    • Marcado como Resposta RobertoDaSilva segunda-feira, 28 de setembro de 2009 21:06
    segunda-feira, 28 de setembro de 2009 13:45
    Moderador
  • Boas Israel,

    Obrigado pela resposta.
    Cometí um erro na digitação do erro: onde lê "../Service.svc" leia-se "../Service1.svc".
    Estou usando "Silverlight", então encontrei o endereço que vc mencionou no arquivo "ServiceReferences.ClientConfig" que esta no projeto UiSilverligh, fiz a substituição, recompilei e publiquei novamente, agora o erro passou a ser outro: "The remote server returned an error: Not Found".

    Segue o conteudo do arquivo "ServiceReferences.ClientConfig"

    <configuration>
        <
    system.serviceModel
    >
            <
    bindings
    >
                <
    basicHttpBinding
    >
                    <
    binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
    >
                        <
    security mode="None"
    />
                    </
    binding
    >
                </
    basicHttpBinding
    >
            </
    bindings
    >
            <
    client
    >
                <!--
                <endpoint address="http://localhost:50683/Service1.svc" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                    name="BasicHttpBinding_IService1" />
                -->
                <
    endpoint address="http://localhost/global/Service1.svc" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                    name="BasicHttpBinding_IService1"
    />
            </
    client
    >
        </
    system.serviceModel
    >
    </
    configuration
    >

    abs,

    Roberto

    segunda-feira, 28 de setembro de 2009 14:51
  • Boas Roberto,

    Do lado do cliente está OK. E como está a configuração do lado do serviço?
    http://www.israelaece.com
    segunda-feira, 28 de setembro de 2009 14:57
    Moderador
  • Israel,


    O arquivo Web.Config que esta no projeto WcfService, tem o seguinte conteúdo:

    <?xml version="1.0"?>

    <configuration>

          <configSections>

                <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

                      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

                            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

                            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

                                 <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>

                                 <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

                                 <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

                                 <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

                            </sectionGroup>

                      </sectionGroup>

                </sectionGroup>

          </configSections>

          <appSettings/>

          <connectionStrings/>

          <system.web>

                <compilation debug="true">

                      <assemblies>

                            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

                            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                      </assemblies>

                </compilation>

                <authentication mode="Windows"/>

                <pages>

                      <controls>

                            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                      </controls>

                </pages>

                <httpHandlers>

                      <remove verb="*" path="*.asmx"/>

                      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

                </httpHandlers>

                <httpModules>

                      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                </httpModules>

          </system.web>

          <system.codedom>

                <compilers>

                      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

                            <providerOption name="CompilerVersion" value="v3.5"/>

                            <providerOption name="WarnAsError" value="false"/>

                      </compiler>

                </compilers>

          </system.codedom>

          <system.web.extensions>

                <scripting>

                      <webServices>

                      </webServices>

                </scripting>

          </system.web.extensions>

          <system.webServer>

                <validation validateIntegratedModeConfiguration="false"/>

                <modules>

                      <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                </modules>

                <handlers>

                      <remove name="WebServiceHandlerFactory-Integrated"/>

                      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

                </handlers>

          </system.webServer>

          <system.serviceModel>

                <services>

                      <service name="WcfService.Service1" behaviorConfiguration="WcfService.Service1Behavior">

                            <!-- Service Endpoints -->

                            <endpoint address="" binding="basicHttpBinding" contract="WcfService.IService1">

                                 <identity>

                                       <dns value="localhost"/>

                                 </identity>

                            </endpoint>

                            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

                      </service>

                </services>

                <behaviors>

                      <serviceBehaviors>

                            <behavior name="WcfService.Service1Behavior">

                                 <serviceMetadata httpGetEnabled="true"/>

                                 <serviceDebug includeExceptionDetailInFaults="false"/>

                            </behavior>

                      </serviceBehaviors>

                </behaviors>

          </system.serviceModel>
    </configuration>





    abs,


    Roberto

    segunda-feira, 28 de setembro de 2009 15:36
  • Boas Roberto,

    E você consegue acessar o serviço no browser, através do arquivo *.svc?
    http://www.israelaece.com
    segunda-feira, 28 de setembro de 2009 17:27
    Moderador
  • Israel,

    Tentei acessar o serviço digitando o endereço http://localhost/global/Service1.svc e foi exibido a mensagem abaixo:

    Erro de Servidor no Aplicativo '/Global'.

    O serviço 'WcfService.Service1' não tem nenhum ponto de extremidade de aplicativo (sem infra-estrutura). Isto talvez seja porque não foi encontrado nenhum arquivo de configuração para seu aplicativo ou porque nenhum elemento de serviço correspondente ao nome de serviço pôde ser encontrado, ou porque nenhum ponto de extremidade foi definido no elemento de serviço.

    Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

    Detalhes da Exceção: System.InvalidOperationException: O serviço 'WcfService.Service1' não tem nenhum ponto de extremidade de aplicativo (sem infra-estrutura). Isto talvez seja porque não foi encontrado nenhum arquivo de configuração para seu aplicativo ou porque nenhum elemento de serviço correspondente ao nome de serviço pôde ser encontrado, ou porque nenhum ponto de extremidade foi definido no elemento de serviço.

    Erro de Origem:

    Exceção não tratada foi gerada durante a execução da atual solicitação da Web. As informações relacionadas à origem e ao local da exceção podem ser identificadas usando-se o rastreamento de pilha de exceção abaixo.


    Rastreamento de Pilha:

     

    [InvalidOperationException: O serviço 'WcfService.Service1' não tem nenhum ponto de extremidade de aplicativo (sem infra-estrutura). Isto talvez seja porque não foi encontrado nenhum arquivo de configuração para seu aplicativo ou porque nenhum elemento de serviço correspondente ao nome de serviço pôde ser encontrado, ou porque nenhum ponto de extremidade foi definido no elemento de serviço.]

       System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription description) +279

       System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +64

       System.ServiceModel.ServiceHostBase.InitializeRuntime() +37

       System.ServiceModel.ServiceHostBase.OnBeginOpen() +27

       System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +49

       System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +261

       System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +121

       System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +479

     

    [ServiceActivationException: Não é possível ativar o serviço '/Global/Service1.svc' devido a uma exceção durante a compilação. A mensagem de exceção é: O serviço 'WcfService.Service1' não tem nenhum ponto de extremidade de aplicativo (sem infra-estrutura). Isto talvez seja porque não foi encontrado nenhum arquivo de configuração para seu aplicativo ou porque nenhum elemento de serviço correspondente ao nome de serviço pôde ser encontrado, ou porque nenhum ponto de extremidade foi definido no elemento de serviço..]

       System.ServiceModel.AsyncResult.End(IAsyncResult result) +11536522

       System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +194

       System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +176

       System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +278

       System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68

       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

     


    Informações sobre a Versão: Microsoft .NET Framework Versão:2.0.50727.4016; Versão do ASP.NET:2.0.50727.4016

     



    abs,


    Pedro Palma 
    segunda-feira, 28 de setembro de 2009 18:36
  • Boas Roberto,

    O arquivo svc está na mesma aplicação? Esse erro ocorre quando não existe um arquivo com as configurações do serviço (endpoint, bindings, etc.).
    http://www.israelaece.com
    segunda-feira, 28 de setembro de 2009 18:38
    Moderador
  • Israel,

    Como eu disse no inicio deste post, a solução “Teste” que criei no VS2008 é composta por três projetos (WCF) WcfService, (UI) UiSilverlight e UiSilverlight.Web.
    Só tem o serviço "Service'.svc" que retorna uma string "Alo Mundo !!!".
    No cliente só tem um botão para chamar o serviço.

    Aqui estão os arquivos nas respectivas pastas:

    C:/inetpub/wwwrot/Global
    /clientaccesspolicy.xml
    /crossdomain.xml
    /default.aspx
    /Service1.svc
    /Silverlight.js
    /UiSilverlightTestPage.aspx
    /UiSilverlightTestPage.html
    /Web.config

    C:/inetpub/wwwrot/Global/bin
    /System.Web.Silverlight.dll
    /Silverlight.Web.dll
    /Silverlight.Web.pdb
    /WcfService.dll
    /WcfService.pdb

    C:/inetpub/wwwrot/Global/ClientBin
    /UiSilverlight.xap

    C:/inetpub/wwwrot/Global/App_Data
    (vazio)

    C:/inetpub/wwwrot/Global/Service References

    (vazio)

    abs,

    Roberto

    segunda-feira, 28 de setembro de 2009 19:56
  • Israel,

    Agradeço a sua bondade em me ajudar e tambem ajudar os outros colegas.
    Peço desculpas por ter ocupado o seu tempo.
    O problema foi resolvido utilizando o velho método: "quando esta muito mexido é melhor começar do zero", rs.

    Executei os seguintes procedimentos:
    1) Deletei a pasta "Global" que estava no wwwroot.
    2) Criei novamente a pasta "Global" e adicionei no IIS como Application.
    3) Publiquei o serviço.
    4) Publiquei a aplicação.

    Resultado "Bingo !!!".

    Muito obrigado e que Deus te abençoe,

    abs,


    Roberto

    • Sugerido como Resposta Alexandre FC quarta-feira, 16 de dezembro de 2009 19:17
    segunda-feira, 28 de setembro de 2009 21:05