我正在尝试使用wcf角色将我的应用程序连接到azure。一切正常,直到我一次调用多个wcf方法。我认为这是因为线程化。例外是:
http://localhost:57579/Service1.svc没有可以接受该消息的端点。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。
我正在搜索如何向wcf服务添加线程,我发现了这个:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
或
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall]
我试图结合这些属性,但它不起作用:(
这是我的简单代码: 客户端:
public MainPage()
{
InitializeComponent();
service = new Service1Client();
service.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(getDataCompleted);
service.GetDataAsync(1);
service.GetDataAsync(2);
}
void getDataCompleted(object sender, GetDataCompletedEventArgs e)
{
if (e.Error != null)
{
}
else
{
this.textBlock1.Text = e.Result;
}
}
服务器:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
答案 0 :(得分:1)
我认为问题在于您使用同一个客户端同时执行两项操作。您是否试过启动两个客户并要求他们每个人执行操作?
public MainPage()
{
InitializeComponent();
service1 = new Service1Client();
service1.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(getDataCompleted);
service1.GetDataAsync(1);
service2 = new Service1Client();
service2.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(getDataCompleted);
service2.GetDataAsync(2);
}
请注意,还有其他方法可以执行异步调用,这些方法不需要订阅/取消订阅事件处理程序。