0

我有两个由托管服务提供商托管的 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;
  }
}
4

1 回答 1

0

您使用的域别名可能无法在服务器本地运行。登录到该服务器,启动 Web 浏览器,然后导航到代码中使用的服务 URL ( http://www.mydomain.com/ServiceTwo.svc)。确保您没有收到任何错误消息。

于 2012-04-27T14:15:54.257 回答