WCF服务调用在Intranet中正常工作,但在Internet中不能正常工作

时间:2012-12-09 11:15:05

标签: wcf silverlight iis

我一直在使用silverlight应用程序超过一个月,并且偶然发现了一个奇怪的问题。 我有一个在IIS中运行的WCF服务,可以从URL访问: https://xyztestname.com/service1.svc

我可以在visual studio中使用它,当从visual studio部署时,我能够从WCF服务获得适当的回调,一切正常。 当我将包文件部署到与IIS中的Service1.svc相同的文件夹时,WCF服务没有正常运行。

请帮我解决这个问题:(!这是我的web.config文件。

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
 http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"/>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
 <binding name="BasicHttpEndpointBinding">
 <security mode="TransportCredentialOnly">
 <transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="InformationService.Service1">
<endpoint address="" binding="basicHttpBinding"     bindingConfiguration="BasicHttpEndpointBinding"
name="BasicHttpEndpoint" contract="InformationService.IService1">    
</endpoint>    
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
 <serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>

我不知道我哪里错了。但通过Intranet访问时相同的虚拟文件夹工作正常,但通过互联网访问时不起作用:(请帮忙。

修改 在检查客户端配置后,我发现Visual Studio自动将URL解析为Intranet URL。当我改回互联网网址时,我得到一个异常抛出。

尝试向URI“https://xyztestname.com/Service1.svc”发出请求时发生

n错误。这可能是由于尝试在没有适当的跨域策略的情况下以跨域方式访问服务,或者是不适合SOAP服务的策略。您可能需要联系服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头。在不使用InternalsVisibleToAttribute属性的情况下,在Web服务代理中使用内部类型也可能导致此错误。有关更多详细信息,请参阅内部异常。

但是,我已将crossdomain和clientaccesspolicy文件复制到IIS中的应用程序的根目录中。 :(请帮忙。

1 个答案:

答案 0 :(得分:0)

您必须将应用程序部署到特定的IP和端口才能在Internet上使用它。 我想你可以。

要执行此操作,您需要手动编辑applicationhost.config文件(编辑bindingInformation'::')

要启动iisexpress,您需要管理员权限

1 – Bind your application to your public IP address

通常,当您在IIS Express中运行应用程序时,它只能在http:// localhost:[someport]上访问。为了从另一台机器访问它,它也需要绑定到您的公共IP地址。打开D:\ Users [YourName] \ Documents \ IISExpress \ config \ applicationhost.config并找到您的站点。你会发现这样的东西:

 <site name="YOUR PROJECT NAME HERE" id="2">
     <application path="/"> 
     <virtualDirectory path="/" physicalPath="YOUR PHYSICAL PATH HERE"
             <binding protocol="http" bindingInformation="*:58938:localhost" />
    </bindings>
</site> 

在,添加另一行:

   <binding protocol="http" bindingInformation="*:58938:192.168.1.42" /> 

(但当然是你的IP和端口号)

    2 - Allow incoming connections

如果您运行的是Windows 7,几乎所有传入连接都被锁定,因此您需要专门允许传入连接到您的应用程序。首先,启动管理命令提示符。其次,运行这些命令,将192.168.1.42:58938替换为您正在使用的IP和端口:

  

netsh http add urlacl url = http://192.168.1.42:58938 / user = everyone

这只是告诉http.sys可以和这个网址对话。

  

netsh advfirewall防火墙添加规则名称=“IISExpressWeb”dir = in protocol = tcp localport = 58938 profile = private remoteip = localsubnet action = allow

这会在Windows防火墙中添加一条规则,允许本地子网上的计算机与端口58938建立传入连接。

你去了,现在可以在Visual Studio中按Ctrl-F5,然后从另一台计算机浏览你的网站!