具有多个终结点的 WCF 单一实例服务



我有一个单例wcf服务(InstanceContextMode.Single),即具有多个端点的MyService,即netmsmq和http。对netmsmq的调用工作正常,但是当我将其称为:

Binding bin = new BasicHttpBinding();
            EndpointAddress end = new EndpointAddress("http://localhost/WcfService1/MyService.svc");
            var obje = new ChannelFactory<IMyService>(bin, end);
            obje.Open();
            var factory = obje.CreateChannel();
            factory.MethodCall(this) ;  //this is ref of MyService1 obj
            obje.Close();

在 Myservice1 的 ctor 中,我在以下行得到一个不可序列化的异常:

factory.MethodCall(this);

在此之后,我在 MyService1 上添加了 [Serializable][KnownType(typeof(MyService1))] 属性,但现在如果我调用 MethodCall 方法,我会收到超时异常。

编辑:方法调用方法签名在 MyService 中如下所示:

public void MethodCall(IMyService1 obj){}

其中 MyService1 实现了 IService。

编辑2:事实证明,http 调用正在尝试命中 netmsmq 的地址。我正在做:

 Binding binding = new BasicHttpBinding();
                Uri via = new Uri("http://localhost/WcfService1/MyService.svc");
                 my_host.AddServiceEndpoint(type, binding, "",via);

而对于 netmsmq,我正在做:

var contractName = serviceContract + serviceType.Name; 
nbinding.CustomDeadLetterQueue = new Uri(customDlq);
my_host.AddServiceEndpoint(contractName, nbinding, "net.msmq://localhost/private/MyService.svc");

我在 web.config 中使用服务激活,并在服务托管环境中设置了multipleSiteBindingsEnabled="true"。我得到的错误是:

"对'http://localhost/WcfService1/MyService.svc'的 HTTP 请求已超过分配的超时 00:00:59.9940000。分配给此操作的时间可能是较长超时的一部分。

编辑3:http 的 wsdl 位置显示为:

http://localhost/WcfService1/MyService.svc

对于 MSMQ 作为:

net.msmq://localhost/private/WcfService1/MyService.svc

合同都是[OperationContract (IsOneWay = true)]

这两个服务都承载在 IIS 上,并且是单个项目的一部分。我在想也许我不能使用单例服务的多个端点。这是原因吗?我已经在这里呆了 2 天,认为一双新鲜的眼睛可能会解决问题。任何帮助将不胜感激。如果需要,我可以发布堆栈跟踪。

是的,WCF 单一实例服务可以有多个终结点。

此问题已通过在 IMyService 接口中的方法声明上使用[ServiceKnownType(typeof(MyService1))]得到解决。喜欢

[ServiceKnownType(typeof(MyService1))]
public void MethodCall(IMyService1 obj);

这是一个序列化问题。

相关内容

  • 没有找到相关文章

最新更新