首页 > 解决方案 > 如何通过服务通道调用服务

问题描述

我正在尝试通过服务渠道调用服务。我的BeginGet()电话工作正常,但EndGet()出现如下铸造错误。有人可以告诉我我做错了什么吗?

错误:无法将“Service.AddressServiceClient”类型的对象转换为“ServiceClient`1[IAddressServiceChannel]”类型。

我的代码:

 public IAsyncResult BeginGet(long id)
 {
        var service = GetClient();  
        IAsyncResult handle = service.BeginGetAddress(id);
        return handle;
 }

 private Service.AddressServiceClient GetClient()
 {
        var client = new Service.AddressServiceClient();
        client.Endpoint.EndpointBehaviors.Clear();
        client.Endpoint.EndpointBehaviors.Add(SetCred()); // setting custom credentials

        return client;
  }

public  EndGet(IAsyncResult handle)
{
     handle.AsyncWaitHandle.WaitOne();

     //ServiceClient is a class which implements IDisposable

     ***// getting runtime exception at following line***
     using (var channel = (ServiceClient<Service.IServiceChannel>)handle.AsyncState) 
     {
            return channel.Client.EndGetAddress(handle)
     }
 }

我确实尝试进行EndGet()如下更改,但出现编译错误:

public  EndGet(IAsyncResult handle)
{
     handle.AsyncWaitHandle.WaitOne();

     ***// get compilation error AddressServiceClient is a type, which is not valid in given context*** 
     using (var channel = <Service.AddressServiceClient> handle.AsyncState)
        {
              return channel.Client.EndGetAddress(handle)
        }
 }

标签: c#.netwcfmodel-view-controller

解决方案


推荐阅读