2017-05-10 5 views
0

私はASP.NETコアアプリケーションにWCFサービスを含めるためにarticleを追跡しました。プロキシクラス内の操作を同期としてのみ使用する方法は?

Generated Reference.csファイルには、自動的に非同期操作が含まれているようです。 これらの操作を同期させることは可能ですか?クライアント側でReference.csを使用していますか?

生成Reference.csファイルがfollows-

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  // 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace SimpleServiceReference 
{ 
    using System.Runtime.Serialization; 


    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "0.5.0.0")] 
    [System.Runtime.Serialization.DataContractAttribute(Name="CompositeType", Namespace="http://schemas.datacontract.org/2004/07/SimpleService")] 
    public partial class CompositeType : object 
    { 

     private bool BoolValueField; 

     private string StringValueField; 

     [System.Runtime.Serialization.DataMemberAttribute()] 
     public bool BoolValue 
     { 
      get 
      { 
       return this.BoolValueField; 
      } 
      set 
      { 
       this.BoolValueField = value; 
      } 
     } 

     [System.Runtime.Serialization.DataMemberAttribute()] 
     public string StringValue 
     { 
      get 
      { 
       return this.StringValueField; 
      } 
      set 
      { 
       this.StringValueField = value; 
      } 
     } 
    } 

    [System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "0.5.0.0")] 
    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="SimpleServiceReference.ISimpleService")] 
    public interface ISimpleService 
    { 

     [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISimpleService/GetData", ReplyAction="http://tempuri.org/ISimpleService/GetDataResponse")] 
     System.Threading.Tasks.Task<string> GetDataAsync(int value); 

     [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISimpleService/GetDataUsingDataContract", ReplyAction="http://tempuri.org/ISimpleService/GetDataUsingDataContractResponse")] 
     System.Threading.Tasks.Task<SimpleServiceReference.CompositeType> GetDataUsingDataContractAsync(SimpleServiceReference.CompositeType composite); 
    } 

    [System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "0.5.0.0")] 
    public interface ISimpleServiceChannel : SimpleServiceReference.ISimpleService, System.ServiceModel.IClientChannel 
    { 
    } 

    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "0.5.0.0")] 
    public partial class SimpleServiceClient : System.ServiceModel.ClientBase<SimpleServiceReference.ISimpleService>, SimpleServiceReference.ISimpleService 
    { 

    /// <summary> 
    /// Implement this partial method to configure the service endpoint. 
    /// </summary> 
    /// <param name="serviceEndpoint">The endpoint to configure</param> 
    /// <param name="clientCredentials">The client credentials</param> 
    static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); 

     public SimpleServiceClient() : 
       base(SimpleServiceClient.GetDefaultBinding(), SimpleServiceClient.GetDefaultEndpointAddress()) 
     { 
      this.Endpoint.Name = EndpointConfiguration.BasicHttpBinding_ISimpleService.ToString(); 
      ConfigureEndpoint(this.Endpoint, this.ClientCredentials); 
     } 

     public SimpleServiceClient(EndpointConfiguration endpointConfiguration) : 
       base(SimpleServiceClient.GetBindingForEndpoint(endpointConfiguration), SimpleServiceClient.GetEndpointAddress(endpointConfiguration)) 
     { 
      this.Endpoint.Name = endpointConfiguration.ToString(); 
      ConfigureEndpoint(this.Endpoint, this.ClientCredentials); 
     } 

     public SimpleServiceClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : 
       base(SimpleServiceClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress)) 
     { 
      this.Endpoint.Name = endpointConfiguration.ToString(); 
      ConfigureEndpoint(this.Endpoint, this.ClientCredentials); 
     } 

     public SimpleServiceClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : 
       base(SimpleServiceClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) 
     { 
      this.Endpoint.Name = endpointConfiguration.ToString(); 
      ConfigureEndpoint(this.Endpoint, this.ClientCredentials); 
     } 

     public SimpleServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
       base(binding, remoteAddress) 
     { 
     } 

     public System.Threading.Tasks.Task<string> GetDataAsync(int value) 
     { 
      return base.Channel.GetDataAsync(value); 
     } 

     public System.Threading.Tasks.Task<SimpleServiceReference.CompositeType> GetDataUsingDataContractAsync(SimpleServiceReference.CompositeType composite) 
     { 
      return base.Channel.GetDataUsingDataContractAsync(composite); 
     } 

     public virtual System.Threading.Tasks.Task OpenAsync() 
     { 
      return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndOpen)); 
     } 

     public virtual System.Threading.Tasks.Task CloseAsync() 
     { 
      return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndClose)); 
     } 

     private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration) 
     { 
      if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_ISimpleService)) 
      { 
       System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding(); 
       result.MaxBufferSize = int.MaxValue; 
       result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; 
       result.MaxReceivedMessageSize = int.MaxValue; 
       result.AllowCookies = true; 
       return result; 
      } 
      throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); 
     } 

     private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) 
     { 
      if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_ISimpleService)) 
      { 
       return new System.ServiceModel.EndpointAddress("http://localhost:49945/SimpleService.svc"); 
      } 
      throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); 
     } 

     private static System.ServiceModel.Channels.Binding GetDefaultBinding() 
     { 
      return SimpleServiceClient.GetBindingForEndpoint(EndpointConfiguration.BasicHttpBinding_ISimpleService); 
     } 

     private static System.ServiceModel.EndpointAddress GetDefaultEndpointAddress() 
     { 
      return SimpleServiceClient.GetEndpointAddress(EndpointConfiguration.BasicHttpBinding_ISimpleService); 
     } 

     public enum EndpointConfiguration 
     { 

      BasicHttpBinding_ISimpleService, 
     } 
    } 
} 

答えて

1

のように見えるあなたは同期非同期メソッドを呼び出すことができますし、これを行うには、いくつかの方法があります。Task<T>使用について

は:

var result = Task.Run(AsyncMethod).Result; 
// if the Task fails, GetResult() will just throw an `AggregateException` 

// or use 

var result AsyncMethod.GetAwaiter().GetResult(); 
// if the Task fails, GetResult() will just throw the exception caused directly 

TaskTask<T>でない)の場合:

AsyncMethod.RunSynchronously(); 
関連する問題