using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Security;
using Microsoft.Web.Services2.Security.Tokens;
using Microsoft.Web.Services2.Security.X509;
public void ConfigureService(string username, string password, string certKey)
{
var service = new WebServicesClientProtocol();
service.Url = url;
service.RequestSoapContext.Security.Tokens.Add(new UsernameToken(username, password, PasswordOption.SendPlainText));
var store = X509CertificateStore.LocalMachineStore(X509CertificateStore.MyStore);
store.OpenRead();
var cert = store.FindCertificateBySubjectString(certKey)[0];
var clientToken = new X509SecurityToken(cert);
store.Close();
service.RequestSoapContext.Security.Tokens.Add(clientToken);
var signature = new MessageSignature(clientToken);
service.RequestSoapContext.Security.Elements.Add(signature);
}
Это просто инициализация протокола WebServicesClientProtocol, остальные - просто вызов конечных точек.
Это код, который используется для связи со службой.Можно ли написать только на WCF, чтобы не использовать WSE?
Я пытался
var binding = new BasicHttpsBinding(BasicHttpsSecurityMode.TransportWithMessageCredential);
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
var address = new EndpointAddress(endpointAddress);
var client = new ServiceSoapClient(binding, address);
client.ClientCredentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.My,
X509FindType.FindBySubjectName,
certName);
client.ClientCredentials.UserName.UserName = username
client.ClientCredentials.UserName.Password = password;
Но это не работает, я просто получаю
System.Web.Services.Protocols.SoapException: Access to the operation is not present.
at RecieversNamespace.Framework.ProcessMessage(SoapMessage message)
at System.Web.Services.Protocols.SoapMessage.RunExtensions(SoapExtension[] extensions, Boolean throwOnException)
at System.Web.Services.Protocols.SoapServerProtocol.CreateServerInstance()
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
System.Web.Services.Protocols.SoapException: Доступ к операции неприсутствует.
Когда я добавляю конечную точку службы, я не уверен, как настроить привязки для репликации кода выше.В частности, часть MessageSignature.
Спасибо