C# 如何在需要用户名验证的WCF中使用mex服务?
我创建了一个基于TCP的web服务,并公开了一个mex端点。最近,我通过C# 如何在需要用户名验证的WCF中使用mex服务?,c#,asp.net,wcf,mex,C#,Asp.net,Wcf,Mex,我创建了一个基于TCP的web服务,并公开了一个mex端点。最近,我通过 var tcpbinding = new NetTcpBinding(SecurityMode.TransportWithMessageCredential, true); tcpbinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; svh.Credentials.Use
var tcpbinding = new NetTcpBinding(SecurityMode.TransportWithMessageCredential, true);
tcpbinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
svh.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new BWUserNamePasswordValidator();
svh.Credentials.UserNameAuthentication.UserNamePasswordValidationMode =UserNamePasswordValidationMode.Custom;
svh.Credentials.ServiceCertificate.Certificate = TcpBindingCertificate;
现在,当我试图更新客户机项目中的服务引用时,我收到一条关于元数据的错误消息,其中包含无法解析的引用。删除安全代码后,mex工作正常
以下是mex端点的代码:
// Check to see if the service host already has a ServiceMetadataBehavior
ServiceMetadataBehavior smb = svh.Description.Behaviors.Find<ServiceMetadataBehavior>();
// If not, add one
if (smb == null)
smb = new ServiceMetadataBehavior();
//smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
svh.Description.Behaviors.Add(smb);
// Add MEX endpoint
svh.AddServiceEndpoint(
ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexTcpBinding(),
location+"/mex"
);
//检查服务主机是否已具有ServiceMetadataBehavior
ServiceMetadataBehavior smb=svh.Description.Behaviors.Find();
//如果没有,请添加一个
如果(smb==null)
smb=新的ServiceMetadataBehavior();
//smb.HttpGetEnabled=true;
smb.MetadataExporter.PolicyVersion=PolicyVersion.Policy15;
svh.Description.Behaviors.Add(smb);
//添加MEX端点
svh.AddServiceEndpoint(
ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexTcpBinding(),
位置+“/mex”
);
为什么我会得到这个,如何修复