我有一个单独的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天了,以为新鲜的双眼可能会成功。 任何帮助,将不胜感激。如果需要,我可以发布堆栈跟踪。
答案 0 :(得分:0)
是的,wcf单例服务可以有多个端点。
通过在IMyService接口中使用[ServiceKnownType(typeof(MyService1))]
方法声明来解决问题。像,
[ServiceKnownType(typeof(MyService1))]
public void MethodCall(IMyService1 obj);
这是一个序列化问题。