簡體   English   中英

無法在 .net 核心中使用 WCF WSHttpBinding

[英]Unable to consume WCF WSHttpBinding in .net core

我正在嘗試將我的項目從 .net 移動到 .net core。 我最初在 .net 中使用 WCF WSHttpBinding 服務,但我無法在 .net 核心中使用相同的服務。 我嘗試在客戶端使用 BasicHttpBinding 與 WsHttpBinding 連接,但它拋出一個錯誤,說 Bindings 應該在客戶端和服務器端都匹配。

建議如何在不修改客戶端的 WSHttpBindings 的情況下在 .Net Core 上實現 WSHttpBinding。?

在.net核心2.1中,WCF WSHttpBinding尚不支持。 以下是.Net核心中支持的綁定列表

  • basicHttpBinding的
  • CustomBinding
  • NetHttpBinding
  • NetTcpBinding的

詳細了解支持的功能請點擊此處

我在完整框架上使用了WSHttpBinding。 遷移到.net核心2.2后,我遇到了同樣的問題。

后來我發現BasicHttpsBinding(它是https,而不是http)完全符合我的需要。 我簡單地用BasicHttpsBinding替換了WSHttpBinding,一切正常(在windows和linux上)。

這是一個更完整的答案,可能會幫助那些嘗試使用.NET Core(.NET Core 2.2)調用SOAP服務端點並且正在努力使其正常工作的人。

對於答案,我假設您已經添加了連接服務。 如果沒有,請參閱此Microsoft文章

下面的示例使用帶有Ntlm憑據類型(DOMAIN \\ Username)的BasicHttpBinding

public async Task<string> AddNAVSalesOrder(string jsonString)
{
    var binding = new BasicHttpsBinding();
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;

    var endpoint = new EndpointAddress(_appConfig["NAVEndpoint"]);

    var client = new eCommIntegrationMgt_PortClient(binding, endpoint);

    client.ClientCredentials.UserName.UserName = _appConfig["NAVUsername"];
    client.ClientCredentials.UserName.Password = _appConfig["NAVPassword"];

    try
    {
        var result = await client.ImportSalesOrderAsync(jsonString);

        return result.return_value;
    }
    catch (Exception)
    {
        throw;
    }
}

_appConfig是一個全局變量,可通過DI(依賴注入)獲得。 如果您沒有使用DI,可以用硬編碼值替換它們。 這里的catch是多余的,但您可以添加自定義錯誤處理/日志記錄。

eCommIntegrationMgt_PortClient是客戶端,即存在所有端點的Service對象。

我能夠使用自定義綁定使其工作。 還可以配置https,文本和二進制綁定元素。

var binding = new CustomBinding
{
    Elements = { new HttpTransportBindingElement
    {
        MaxBufferSize = int.MaxValue,
        MaxReceivedMessageSize = int.MaxValue
    }}
};

這是我使用的片段

        var binding = GetCustomBinding();

        private Binding GetCustomBinding()
        {
            CustomBinding result = new CustomBinding();
            TextMessageEncodingBindingElement textBindingElement = new TextMessageEncodingBindingElement();
            result.Elements.Add(textBindingElement);
            HttpsTransportBindingElement httpsBindingElement = new HttpsTransportBindingElement
            {
                AllowCookies = true,
                MaxBufferSize = int.MaxValue,
                MaxReceivedMessageSize = int.MaxValue,
                AuthenticationScheme = System.Net.AuthenticationSchemes.Negotiate
            };
            result.Elements.Add(httpsBindingElement);
            return result;
        }

.Net Core 還不支持 WsHttpBinding。 你可以試試這個。 https://www.nuget.org/packages/WsSecurityCore/

您可以獲得 XmlNodeList 或 Xml 完整字符串形式的響應,並使用 XmlSerializer 轉換為您的類的響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM