C# 如何在需要用户名验证的WCF中使用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

我创建了一个基于TCP的web服务,并公开了一个mex端点。最近,我通过

        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”
);
为什么我会得到这个,如何修复