具有多个端点的WCF单例服务?

时间:2015-06-11 10:56:10

标签: wcf serialization singleton wcf-endpoint

我有一个单独的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中,MethodCall方法签名如下:

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天了,以为新鲜的双眼可能会成功。 任何帮助,将不胜感激。如果需要,我可以发布堆栈跟踪。

1 个答案:

答案 0 :(得分:0)

是的,wcf单例服务可以有多个端点。

通过在IMyService接口中使用[ServiceKnownType(typeof(MyService1))]方法声明来解决问题。像,

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

这是一个序列化问题。