无法从WebApplication

时间:2016-09-29 13:52:02

标签: c# asp.net web-services wcf soap

我在公司的数据中心托管了一个简单的WCF SOAP服务,只有一个方法接收Guid(用于标识请求),并且不返回任何内容(void)。我们使用此方法作为服务从数据库加载其配置的信号。该服务是一个使用SOAP的自托管WCF,它作为WindowsService运行。

当用户更改与他相关的配置时,将从ASP.NET Web应用程序调用此服务。数据库已更新,并且调用该服务以加载其更新的设置。

问题是,此服务突然无法再从生产中的应用程序访问。我收到404错误,但是当从应用程序的机器中的浏览器打开WSDL时,它会正常加载。

尝试重现问题,我创建了控制台应用程序,只是为了从我的开发机器调用它,它可以工作。但是,如果我尝试从新的Web应用程序调用它,则会发生另一个问题:"连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能连接而建立的连接失败响应"

另外,如果我使用SoapUI或Visual Studio的WCF测试客户端进行呼叫,我可以毫无问题地连接。

对于所有测试,我使用相同的方法来创建客户端:创建服务引用(Visual Studio生成的代码工具)。用于调用服务的代码是这样的:

using (var client = new NotificatorClient())
{
    var request = new NotifyRequest { RequestId = Guid.NewGuid() };
    client.Notify(request); // Works from any project that is not a WebApplication
    Label1.Text = "Notificated!";
}

对于所有客户端,我的web.config的system.ServiceModel部分是相同的(正如我所说,处理任何非WebApplication的事情):

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_INotificator">
          <security mode="Transport" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://myservice.com"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_INotificator"
        contract="MyAppNotificatorSvc.INotificator" name="BasicHttpBinding_INotificator" />
    </client>
  </system.serviceModel>

此外,这是我的服务合同,如果它有助于更​​好地了解可能发生的任何问题。

[ServiceContract]
public interface INotificator
{
    [OperationContract]
    void Notify(NotifyRequest request);
}

[DataContract]
public class NotifyRequest
{
    [DataMember(Name = "RequestId", Order = 0, IsRequired = true)]
    public Guid RequestId { get; set; }
}

我们使用带有TLS 1.2的HTTPS作为我们的请求安全协议,并尝试通过在WebApplication上调用此代码来更改它,但我仍然遇到同样的问题。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

我知道这可能听起来不是关于这个问题的真正相关信息,但这是迄今为止我所得到的。有没有人遇到过这类问题?关于可能发生什么的任何提示?

0 个答案:

没有答案