我有一個 WSDL,我可以在其中通過肥皂成功發送有效負載,有必要選擇先發制人的身份驗證,身份驗證是基本的,如圖所示。
樣品肥皂 ui
預期的#Auth標頭-
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="test" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username> username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"> password </wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
在創建客戶端時嘗試了許多系結?根據檔案它應該是用戶名
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; ```
--------------
var bindingws = new WSHttpBinding(SecurityMode.TransportWithMessageCredential);
var bindinghttps = new BasicHttpsBinding(BasicHttpsSecurityMode.TransportWithMessageCredential);
bindinghttps.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;```
----------------
var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
basicHttpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;```
InboundPortClient client = new InboundPortClient(basicHttpBinding, endpointAddress);
client.ClientCredentials.UserName.UserName = "";
client.ClientCredentials.UserName.Password = "";
client.Open();//ok
client.updateCall(null);
//error-System.ServiceModel.ProtocolException: '內容型別 text/html; 回應訊息的 charset=utf-8 與系結的內容型別不匹配 (text/xml; charset=utf-8)。如果使用自定義編碼器,請確保正確實作 IsContentTypeSupported 方法。回應的前 1024 個位元組是:--access denied page
基本上我的理解是系結是不正確的,看看回應任何想法如何使用 wcf/.net 框架在客戶端模仿肥皂。
uj5u.com熱心網友回復:
為每個請求手動設定標頭
var emptybinding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
//create client
ServiceReference.InboundPortClient client = new
ServiceReference.InboundPortClient(emptybinding,
endpointAddress);
// expects username
client.ClientCredentials.UserName.UserName = "xyz";
client.ClientCredentials.UserName.Password = "123";
using (new OperationContextScope(client.InnerChannel))
{
// Add a HTTP Header to an outgoing request
string auth = "Basic " Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(client.ClientCredentials.UserName.UserName ":" client.ClientCredentials.UserName.Password));
HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
requestMessage.Headers["Authorization"] = auth;
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
client.Doyourstuffhere();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512555.html
