[英]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核心中支持的綁定列表
詳細了解支持的功能請點擊此處
我在完整框架上使用了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.