none
Exibir os dados através do WCF após publicar e acessar o sistema externamente RRS feed

  • Pergunta

  • Olá amigos.

    A minha máquina de desenvolvimento será usada para homologar o que está pronto no sistema por dois clientes, dessa forma, eu vou usa-la como provedor de Internet. Ela tem o Windows 7 Ultimate e IIS 7.0. A conexão de Internet será através do Speed da Telefônica, com um link de 2 MB, onde todos os dias o IP externo é alterado e irei passar o link para os clientes diariamente.

    Já configurei o roteador para ao acessar a máquina. Passando este link para acesso externo: http://187.34.250.232/slnefi/slnefi.aspx, os clientes conseguem acessar a aplicação normalmente, o único problema que acontece é de não aparecerem os dados em nenhuma tela, como também não gera nenhuma mensagem de erro. Ao rodar a aplicação local sem alterar absolutamente nada, todos os dados são exibidos perfeitamente.

    Na minha camada DAL, eu estou passando a conexão do banco de dados desta forma:"Data Source=192.168.1.3;Initial Catalog=NEFI; User Id=SA; Password=XYZ;

    O conteúdo do meu arquivo ServiceReferences.ClientConfig está assim:

    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IMyService" maxBufferSize="2147483647"
                        maxReceivedMessageSize="2147483647">
                        <security mode="None">
                            <transport>
                                <extendedProtectionPolicy policyEnforcement="Never" />
                            </transport>
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://192.168.1.3/slhost/servicehost.svc"
                    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService"
                    contract="MyWCF.IMyService" name="BasicHttpBinding_IMyService" />
            </client>
        </system.serviceModel>
    </configuration>

    Segue abaixo o conteúdo do arquivo Web.config no host:

    <?xml version="1.0"?>
    <!--
        Note: As an alternative to hand editing this file you can use the
        web admin tool to configure settings for your application. Use
        the Website->Asp.Net Configuration option in Visual Studio.
        A full list of settings and comments can be found in
        machine.config.comments usually located in
        \Windows\Microsoft.Net\Framework\v2.x\Config
    -->
    <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>
            <!--
                Set compilation debug="true" to insert debugging
                symbols into the compiled page. Because this
                affects performance, set this value to true only
                during development.
            -->
            <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>
            <!--
                The <authentication> section enables configuration
                of the security authentication mode used by
                ASP.NET to identify an incoming user.
            -->
            <authentication mode="Windows"/>
            <!--
                The <customErrors> section enables configuration
                of what to do if/when an unhandled error occurs
                during the execution of a request. Specifically,
                it enables developers to configure html error pages
                to be displayed in place of a error stack trace.

            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
            <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>
        <!--
            The system.webServer section is required for running ASP.NET AJAX under Internet
            Information Services 7.0.  It is not necessary for previous version of IIS.
        -->
        <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>
            <bindings>
         
       <basicHttpBinding>
        <binding name="ServicesBinding" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
         maxReceivedMessageSize="2147483647">
         <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
         <security>
          <transport>
           <extendedProtectionPolicy policyEnforcement="Never" />
          </transport>
         </security>
        </binding>  
       </basicHttpBinding>
         
       <customBinding>
        <binding name="silverlightBinaryBinding">
         <binaryMessageEncoding />
         <httpTransport>
          <extendedProtectionPolicy policyEnforcement="Never" />
         </httpTransport>
        </binding>
       </customBinding>
      </bindings>
       
            <!-- Fault Exception -->
            <extensions>
                <behaviorExtensions>
                    <!-- Here we add the silverlightFaults behaviorExtension. This references the class instance for the behavior that we created in code. -->
                    <add name="silverlightFaults" type="SilverlightFaultBehavior.SilverlightFaultBehavior, SilverlightFaultBehavior, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                </behaviorExtensions>
            </extensions>
            <services>
                <service behaviorConfiguration="HostBehavior" name="Nefi.WCF.MyService">
                    <endpoint address="" behaviorConfiguration="SilverlightFaultBehavior" binding="basicHttpBinding" bindingConfiguration="ServicesBinding" contract="Nefi.WCF.IMyService"/>
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
                </service>
            </services>
            <behaviors>
                <endpointBehaviors>
                    <behavior name="SilverlightFaultBehavior">
                        <silverlightFaults/>
                    </behavior>
                </endpointBehaviors>
                <serviceBehaviors>
                    <behavior name="HostBehavior">
                        <serviceDebug includeExceptionDetailInFaults="true"/>
                        <serviceMetadata httpGetEnabled="true"/>
                    </behavior>
                </serviceBehaviors>
            </behaviors>
        </system.serviceModel>
    </configuration>

    Há algum outro lugar onde eu possa realizar alguma configuração, para que os dados possam aparecer quando a aplicação estiver rodando externarmente?

    Obrigado e um forte abraço a todos!

    quarta-feira, 31 de março de 2010 12:54

Respostas

  • Israel.

    Eu realmente estou extremamente confuso e peço a sua paciência e ajuda para tentar me ajudar nisso. Eu realmente preciso fazer rodar este aplicativo externamente Ao rodar o aplicativo externamente, eu recebo esta mensagem de erro:

    System.ServiceModel.CommunicationException:[CrossDomainError]

    Arguments:http://192.168.1.3/slhost/servicehost.svc

    Debugging resource strings are unavaliable....

    Ao rodar na minha local isso não acontece. Cara pelo amor de não sei em quem você tem uma luz para me ajudar?

    Um forte abraço.

    quinta-feira, 1 de abril de 2010 13:21

Todas as Respostas

  • Boas Marcelos,

    Você tem o arquivo de cross-domain policy?


    http://www.israelaece.com
    quarta-feira, 31 de março de 2010 13:54
    Moderador
  • Grande Israel!

     

    Sim. Os dois arquivos estão no diretório raiz do IIS. Abaixo o conteúdo de cada um deles:

    ClientAcesspolicy.xml

    BODY{font:x-small 'Verdana';margin-right:1.5em} .c{cursor:hand} .b{color:red;font-family:'Courier New';font-weight:bold;text-decoration:none} .e{margin-left:1em;text-indent:-1em;margin-right:1em} .k{margin-left:1em;text-indent:-1em;margin-right:1em} .t{color:#990000} .xt{color:#990099} .ns{color:red} .dt{color:green} .m{color:blue} .tx{font-weight:bold} .db{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;border-left:1px solid #CCCCCC;font:small Courier} .di{font:small Courier} .d{color:blue} .pi{color:blue} .cb{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;font:small Courier;color:#888888} .ci{font:small Courier;color:#888888} PRE{margin:0px;display:inline} <script><!-- function f(e){ if (e.className=="ci"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"cb");} if (e.className=="di"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"db");} e.id=""; } function fix(e,cl){ e.className=cl; e.style.display="block"; j=e.parentElement.children(0); j.className="c"; k=j.children(0); k.style.visibility="visible"; k.href="#"; } function ch(e){ mark=e.children(0).children(0); if (mark.innerText=="+"){ mark.innerText="-"; for (var i=1;i<e.children.length;i++) e.children(i).style.display="block"; } else if (mark.innerText=="-"){ mark.innerText="+"; for (var i=1;i<e.children.length;i++) e.children(i).style.display="none"; }} function ch2(e){ mark=e.children(0).children(0); contents=e.children(1); if (mark.innerText=="+"){ mark.innerText="-"; if (contents.className=="db"||contents.className=="cb") contents.style.display="block"; else contents.style.display="inline"; } else if (mark.innerText=="-"){ mark.innerText="+"; contents.style.display="none"; }} function cl(){ e=window.event.srcElement; if (e.className!="c"){e=e.parentElement;if (e.className!="c"){return;}} e=e.parentElement; if (e.className=="e") ch(e); if (e.className=="k") ch2(e); } function ex(){} function h(){window.status=" ";} document.onclick=cl; --></script>

    <? xml version="1.0" encoding="utf-8" ?>
    - < access-policy >
    - < cross-domain-access >
    - < policy >
    - < allow-from http-request-headers =" * " >
      < domain uri =" * " />
      </ allow-from >
    - < grant-to >
      < resource path =" / " include-subpaths =" true " />
      </ grant-to >
      </ policy >
      </ cross-domain-access >
      </ access-policy >

     

    crossdomain.xml

    BODY{font:x-small 'Verdana';margin-right:1.5em} .c{cursor:hand} .b{color:red;font-family:'Courier New';font-weight:bold;text-decoration:none} .e{margin-left:1em;text-indent:-1em;margin-right:1em} .k{margin-left:1em;text-indent:-1em;margin-right:1em} .t{color:#990000} .xt{color:#990099} .ns{color:red} .dt{color:green} .m{color:blue} .tx{font-weight:bold} .db{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;border-left:1px solid #CCCCCC;font:small Courier} .di{font:small Courier} .d{color:blue} .pi{color:blue} .cb{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;font:small Courier;color:#888888} .ci{font:small Courier;color:#888888} PRE{margin:0px;display:inline} <script><!-- function f(e){ if (e.className=="ci"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"cb");} if (e.className=="di"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"db");} e.id=""; } function fix(e,cl){ e.className=cl; e.style.display="block"; j=e.parentElement.children(0); j.className="c"; k=j.children(0); k.style.visibility="visible"; k.href="#"; } function ch(e){ mark=e.children(0).children(0); if (mark.innerText=="+"){ mark.innerText="-"; for (var i=1;i<e.children.length;i++) e.children(i).style.display="block"; } else if (mark.innerText=="-"){ mark.innerText="+"; for (var i=1;i<e.children.length;i++) e.children(i).style.display="none"; }} function ch2(e){ mark=e.children(0).children(0); contents=e.children(1); if (mark.innerText=="+"){ mark.innerText="-"; if (contents.className=="db"||contents.className=="cb") contents.style.display="block"; else contents.style.display="inline"; } else if (mark.innerText=="-"){ mark.innerText="+"; contents.style.display="none"; }} function cl(){ e=window.event.srcElement; if (e.className!="c"){e=e.parentElement;if (e.className!="c"){return;}} e=e.parentElement; if (e.className=="e") ch(e); if (e.className=="k") ch2(e); } function ex(){} function h(){window.status=" ";} document.onclick=cl; --></script>

    <!DOCTYPE cross-domain-policy (View Source for full doctype...) >
    - < cross-domain-policy >
      < allow-http-request-headers-from domain =" * " headers =" * " secure =" true " />
      </ cross-domain-policy >


    quarta-feira, 31 de março de 2010 14:00
  • Boas Marcelos,

    É dificil dizer o problema. Acho que você poderia tentar capturar o erro no Silverlight, analisando no evento XXXCompleted da tua operação para ver se houve ou não uma Exception.

    Outra alternativa é ligar o tracing no serviço para tentar capturar alguma coisa: http://www.israelaece.com/post/WCF-Video-Habilitando-o-Tracing.aspx
    http://www.israelaece.com
    quarta-feira, 31 de março de 2010 14:04
    Moderador
  • Grande Israel.

    Para fechar este post. Só gostaria de perguntar uma coisa: A "princípio" tudo o que fiz parece estar certo com relação aos arquivos de configurações, certo?

    Se sim, eu vou tentar ver o que está acontecendo e fazer o que você está sugerindo na sua resposta.

    Um forte abraço.

    quarta-feira, 31 de março de 2010 14:07
  • Boas Marcelos,

    Sim, aparentemente está ok.
    http://www.israelaece.com
    quarta-feira, 31 de março de 2010 14:33
    Moderador
  • Israel.

    Eu realmente estou extremamente confuso e peço a sua paciência e ajuda para tentar me ajudar nisso. Eu realmente preciso fazer rodar este aplicativo externamente Ao rodar o aplicativo externamente, eu recebo esta mensagem de erro:

    System.ServiceModel.CommunicationException:[CrossDomainError]

    Arguments:http://192.168.1.3/slhost/servicehost.svc

    Debugging resource strings are unavaliable....

    Ao rodar na minha local isso não acontece. Cara pelo amor de não sei em quem você tem uma luz para me ajudar?

    Um forte abraço.

    quinta-feira, 1 de abril de 2010 13:21
  • Boas Marcelos,

    O serviço está debaixo do mesmo domínio da aplicação que hospeda o Silverlight?
    http://www.israelaece.com
    quinta-feira, 1 de abril de 2010 14:28
    Moderador