我有两个由托管服务提供商托管的 WCF 服务。两种服务都可以正常工作。我可以从我自己的计算机甚至是由其他提供商托管的网站访问它们。奇怪的部分(至少,我不明白的部分)是;一个不能叫另一个。
这两个服务都位于 Web 根目录的子文件夹中,处于相同的层级。像 wwwroot\serviceone 和 wwwroot\servicetwo。两者都在 IIS 中标记为应用程序文件夹,它们都有一个几乎相似的 web.config,如下所示,只是名称不同:
<configuration>
<system.web>
<compilation targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="servone">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="MyService.ServiceOne" behaviorConfiguration="servone">
<endpoint address="" binding="basicHttpBinding" contract=" MyService.IServiceOne "/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
浏览到 .svc 会显示带有示例代码的知名服务页面;
class Test
{
static void Main()
{
ServiceOne client = new ServiceOne ();
// Use the 'client' variable to call operations on the service.
// Always close the client.
client.Close();
}
}
客户端有一个名为 HandleRequest(string str) 的方法。所以在我的代码(C#)中有这样一行;
client.HandleRequest("blah");
该调用不会引发异常(我可以说是因为它们被捕获、处理并写入数据库)。这就像消息已发送但永远不会返回。当我在本地运行此服务(谁调用另一个)并将第二个留在远程服务器上时,一切正常。
显然,很难提供主办方的所有细节。不幸的是,我也无法访问 IIS 安装来模拟环境。因此,基于我能提供的少量信息,我并不期待深入的技术解决方案。但任何关于此设置与其他设置有何不同的评论都可能会有所帮助。
我真的很感激任何努力,谢谢。
编辑:
调用是这样的:
public bool Send(String str)
{
bool result = false;
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress ep = new EndpointAddress("http://www.mydomain.com/ServiceTwo.svc");
client = new ServiceTwoClient(b, ep);
//
try
{
result = client.HandleRequest(str);
client.Close();
return result;
}
catch (Exception x)
{
Add2DbLog(x.Message);
return false;
}
}