2013-06-04 18 views
4

我在配置了IIS的计算机上运行WCF自托管服务。自托管服务开始时没有问题,我可以在启动并运行后实际访问?wsdl路径。为什么我不能从机器外部打我的WCF服务,但我可以在本地?

如果我尝试点击机器上的以下地址,它会加载关于svcutil.exe以及如何访问该服务的网页。

http://myspecialservice:9000/ 
http://192.168.1.230:9000/ 

但是,如果我尝试从另一台机器中击中相同的地址。我什么也没得到。没有错误,页面不能被加载。而且我已经过测试,以确保我在使用主机名时解决了正确的IP地址问题。

另外,我已经配置了可以在具有高级安全性的Windows防火墙中允许的服务的.exe。适用于所有以太网配置文件和任何端口。任何建议都会有所帮助。同样,我知道该服务在本地可以在机器上访问,并且工作正常。看来我缺少某个机器配置。

<?xml version="1.0"?> 
<configuration> 
    <system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add name="TextWriter" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log"/> 
     <add name="Console" type="System.Diagnostics.ConsoleTraceListener"/> 
     <remove name="Default"/> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="CustomHttpBinding" maxReceivedMessageSize="2147483647"> 
      <readerQuotas maxStringContentLength="2147483647"/> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client/> 
    <services> 
     <service name="MyService.Data.Service" behaviorConfiguration="serviceBehavior"> 
     <clear/> 
     <endpoint address="JobsHttp" binding="basicHttpBinding" contract="MyService.Data.IWhereItSits" bindingConfiguration="CustomHttpBinding"></endpoint> 
     <endpoint binding="mexHttpBinding" name="httpmex" contract="IMetadataExchange"></endpoint> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://myspecialservice:9000/"/> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> 

编辑1

因此在防火墙上开放端口9000,而不是指定一个规则来进行service.exe让我打的服务在本地网络上。现在我正试图从外部世界中获得服务。我为路由器添加了一条规则,将任何来自端口9000的流量推送到服务器本身,但我没有收到任何东西。

EDIT 2

我已经安装了网络监视器至网络服务器,我可以确认路由器通过流量返回到服务器本身。然后服务器尝试发送回应。

编辑3

是没有意义的我任何责任。服务器有两个nics,我的目标是从路由器到服务器的1个IP。我将其更改为另一个IP,它从外部工作,任何解释或答案?

+0

如何更改配置文件中的baseAddress以匹配您想要的服务可访问的地址? –

+1

您正在使用IIS,而不是IIS-Express? (后者默认不允许远程连接) –

+0

正确使用IIS。我试图改变基地址,它似乎并不重要。 – meanbunny

回答

0

你说在你的编辑中,你能够到达你的服务器,但192.168.1.230是本地地址。它只在你的本地网络内有效。你的外部世界的IP地址是不同的。 :/


编辑

什么是你的IIS听?也许你有你的绑定(IIS->你的站点 - >右键单击 - >编辑绑定)设置为其他IP只。如果将IP地址更改为“全部未分配”,应该使您的服务也响应第一个IP。

+0

中的hostname命令获得正确的机器名,这就是为什么在其他编辑中它谈到使用路由器 – meanbunny

+0

让我检查这个,刚才看到这个编辑我没有任何通知。 – meanbunny

相关问题