wsHttpBinding workarounds in .NET Core

前端 未结 1 1207
灰色年华
灰色年华 2021-01-24 22:03

I am looking for a dotnet core WCF wsHttpBinding workaround.

I am aware that .net core WCF implementation currently does not support wsHttpBinding (see support matrix h

相关标签:
1条回答
  • 2021-01-24 22:21

    Forget it, they are not completely compatible with Core. Under some specified case, there may be a basic call to WsHttpBinding. You could refer to the following example.
    Server.

       Uri uri = new Uri("http://localhost:11011");
        WSHttpBinding binding = new WSHttpBinding();
        binding.Security.Mode = SecurityMode.None;
        using (ServiceHost sh=new ServiceHost(typeof(MyService),uri))
        {
            sh.AddServiceEndpoint(typeof(IService), binding, "");
            ServiceMetadataBehavior smb;
            smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
            if (smb==null)
            {
                smb = new ServiceMetadataBehavior()
                {
                };
                sh.Description.Behaviors.Add(smb);
            }
            Binding mexbinding = MetadataExchangeBindings.CreateMexHttpBinding();
            sh.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");
            sh.Opened += delegate
            {
                Console.WriteLine("Service is ready");
            };
            sh.Closed += delegate
            {
                Console.WriteLine("Service is clsoed");
            };                
            sh.Open();
    

    Client(auto-generated)

    private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration)
        {
            if ((endpointConfiguration == EndpointConfiguration.WSHttpBinding_IService))
            {
                System.ServiceModel.Channels.CustomBinding result = new System.ServiceModel.Channels.CustomBinding();
                System.ServiceModel.Channels.TextMessageEncodingBindingElement textBindingElement = new System.ServiceModel.Channels.TextMessageEncodingBindingElement();
                result.Elements.Add(textBindingElement);
                System.ServiceModel.Channels.HttpTransportBindingElement httpBindingElement = new System.ServiceModel.Channels.HttpTransportBindingElement();
                httpBindingElement.AllowCookies = true;
                httpBindingElement.MaxBufferSize = int.MaxValue;
                httpBindingElement.MaxReceivedMessageSize = int.MaxValue;
                result.Elements.Add(httpBindingElement);
                return result;
            }  
    

    Invocation.

    ServiceReference1.ServiceClient client2 = new ServiceReference1.ServiceClient();
    try
    {
        var res = client2.SayHelloAsync();
        Console.WriteLine(res.Result);
    
    }
    catch (Exception)
    {
        throw;
    }
    

    While in most cases it is impossible to call WCF service created by WsHttpBinding. Officials also have no intention of continuing to support plan for wshttpbinding. Here are related discussions. https://github.com/dotnet/wcf/issues/31
    https://github.com/dotnet/wcf/issues/1370

    0 讨论(0)
提交回复
热议问题