我使用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地址。也许我对他们犯了错误。我不确定。
答案 0 :(得分:0)
当服务在本地运行但不通过公共IP地址时,通常是两件事之一: