0

我使用 VS2008 和 .NET 3.5。

这是我的情况:

1) 对外服务:

我使用外部服务(对其代码一无所知;对我来说它是黑匣子)并调用它的方法,该方法需要几个参数。其中之一是我应该写的 WCF 服务的地址(见 2))。调用如下所示:

string Url = "http://public-ip:8072/Service.svc";
string content = extClient.Method1(Url, email, param1, param2...);

在 Method1 的某个地方,他们从 2) 调用我的服务。

2)我的服务:

public class Service : IService
{
    public const string ReplyAction = "http://public-ip:8072/Message_ReplyAction";
    public const string RequestAction = "http://public-ip:8072/Message_RequestAction";

    public Message SetData(Message requestXml)
    {
        // Do something
    }
}

网络配置:

<system.serviceModel>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://public-ip:8072/"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>
  <behaviors>
    <serviceBehaviors>
      <behavior name="Parus.ServiceBehavior">
        <serviceMetadata httpGetEnabled="true" httpGetUrl="http://local-ip:8072/Service.svc"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="Parus.ServiceBehavior" name="Parus.Service">
      <endpoint address="http://public-ip:8072/Service.svc" binding="basicHttpBinding" contract="Parus.IService">
      </endpoint>
      <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

当我在本地使用它时,我的服务可以工作,但当我将它暴露给世界时就不行。我的意思是 1) 中的 Method1 根本不调用它。我尝试了不同的事情,但到目前为止没有任何反应。防火墙关闭时它不起作用。此外,添加防火墙端口 8072 的例外时,它也不起作用。

我想我在 Web.config 文件中做错了什么或者错过了 IIS 中的一些设置。您可以关注 Web.config 文件中的 public-ip 和 local-ip 地址。也许我对他们犯了错误。我不确定。

4

1 回答 1

0

当服务在本地工作但不是通过公共 IP 地址工作时,通常是以下两种情况之一:

  • 防火墙正在阻止该请求。在这里,我看到您写道您打开了端口。尝试用telnet测试一下,可能有好几层阻塞了端口,而你只打开了一层。
  • 配置。您在 web.config 中混合使用公共和私有 IP 地址,尝试将所有内容设置为公共 IP 地址。
于 2012-12-11T15:35:12.873 回答