如何在IIS 5.1中托管WCF服务?

时间:2012-12-11 12:16:04

标签: wcf iis deployment

我使用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
    }
}

的Web.config:

<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地址。也许我对他们犯了错误。我不确定。

1 个答案:

答案 0 :(得分:0)

当服务在本地运行但不通过公共IP地址时,通常是两件事之一:

  • 防火墙阻止请求。在这里,我看到你写道,你打开了端口。尝试使用telnet进行测试,也许有几个层阻塞了端口,你只打开了一个。
  • 配置。您可以在web.config中混合使用公共和私有IP地址,尝试将所有内容设置为公共IP地址。