我正在撰写一项服务,允许我们的产品从一个客户到另一个客户彼此沟通。该服务基本上有一个Send方法和Receive方法,其中Send是从一个产品调用的,而Receive是从Send内部调用的,它在另一个产品上调用它。
我在问题标题中收到了所述异常。当我直接使用相同的代码调用它时,该服务工作正常,从WCF服务中调用时似乎只是失败。
以下是我Send
方法中的代码。
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)]
public void Send()
{
var binding = new WebHttpBinding();
var endpoint = new EndpointAddress("http://localhost/instance2/service.svc");
var factory = new ChannelFactory<IService>(binding, endpoint);
var dtoFactory = new DTOFactory();
var outgoingDTO = dtoFactory.Create(obj1, obj2, obj3);
factory.Endpoint.Behaviors.Add(new WebScriptEnablingBehavior());
binding.SendTimeout = new TimeSpan(0, 30, 0);
binding.CloseTimeout = new TimeSpan(0, 30, 0);
var service = factory.CreateChannel();
using (var scope = new OperationContextScope((IContextChannel)service))
{
service.Receive(outgoingDTO);
}
}
该服务在两端都托管在IIS中,因此我知道在调用Receive时,它将在应用程序池帐户下调用,而不是具有会话的Windows帐户。我试图在我的管理员帐户下运行我的应用程序池,只是为了排除这一点,但同样的错误仍然存在。
这一切都在同一台机器上,只是我们产品的两个独立实例。当在WCF服务中调用另一个WCF服务时,我们需要做什么特别的事情,当它们都在IIS中托管时?
两种服务都使用完全相同的配置。 WebHttpBinding,相同的IService接口,以及相同的ServiceHostFactory。 (这只是调整MaxReceivedMessageSize以允许更大的请求)。
标题中的例外实际上是以下内部例外。
{"There was no endpoint listening at http://localhost/instance2/service.svc/Receive that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details."}
内部异常:
{"No connection could be made because the target machine actively refused it 127.0.0.1:8888"}
我已经验证我可以直接调用该服务(而不是来自其他WCF服务)并且它可以正常工作。