C# 主数据服务使用WCF服务创建实体成员

C# 主数据服务使用WCF服务创建实体成员,c#,wcf,sql-server-2016,master-data-services,C#,Wcf,Sql Server 2016,Master Data Services,我正在尝试使用WCF服务创建实体成员 但是这条线 EntityMembersCreateResponse createResponse=clientProxy.EntityMembersCreate(createRequest) 引发以下错误: mscorlib.dll中发生类型为“System.ServiceModel.Security.SecurityNegotiationException”的未处理异常 附加信息:服务未对调用方进行身份验证** 谁能帮帮我吗 我使用以下代码: using

我正在尝试使用WCF服务创建实体成员

但是这条线

EntityMembersCreateResponse createResponse=clientProxy.EntityMembersCreate(createRequest)

引发以下错误:

mscorlib.dll中发生类型为“System.ServiceModel.Security.SecurityNegotiationException”的未处理异常

附加信息:服务未对调用方进行身份验证**

谁能帮帮我吗

我使用以下代码:

using System;
using System.Collections.Generic;

using System.Linq;
using System.Text;
using System.Threading.Tasks;

// additional references...
using System.ServiceModel;
using System.Collections.ObjectModel;
using SAP_to_MDS.MDSTestService; // For the created service reference.


namespace SAP_to_MDS
{
    class MDSConnector
    {

        // MDS service client proxy object. 
        private static ServiceClient clientProxy;

        // Set the MDS URL (plus /Service/Service.svc) here. 
        public static string mdsURL = @"http://myhost/MDS/service/Service.svc";

        public static void Connect() {

            Identifier modelId = null;
                       
            string model = "PDM";
            string entity = "Werks";

            // "VERSION_1" is a default version name for a new model. 
            string version = "VERSION_1";
          
            try
            {
                // Create a service proxy. 
                clientProxy = GetClientProxy(mdsURL);
                clientProxy.ClientCredentials.UserName.UserName = "mydomain\\user";
                clientProxy.ClientCredentials.UserName.Password = "mypassword";
                Console.WriteLine("Connected...");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error creating a service proxy: {0}", ex);
                return;
            }

            // Create an entity member (leaf member) with a specified name, code, and member type.
            string leafMemberCode = "Code" + Guid.NewGuid().ToString("N");
            string leafMemberName = "Name" + Guid.NewGuid().ToString("N");
            // CreateEntityMember(model, version, entity, leafMemberName, leafMemberCode, MemberType.Leaf);
            createEntityMember("PDM", "Version_1", "Werks", "Number", "1", MemberType.Leaf);

            Console.ReadKey();

        }

        // Creates MDS service client proxy.
        private static ServiceClient GetClientProxy(string targetURL)
        {
            // Create an endpoint address using the URL. 
            EndpointAddress endptAddress = new EndpointAddress(targetURL);

            // Create and configure the WS Http binding. 
            WSHttpBinding wsBinding = new WSHttpBinding();

            // Create and return the client proxy. 
            return new ServiceClient(wsBinding, endptAddress);
        }

        
        // Create an entity member with a specified name, code, and member type.
        private static void createEntityMember(string modelName, string version, string entityName, string newName, string newCode, MemberType memberType)
        {
            EntityMembersCreateRequest createRequest = new EntityMembersCreateRequest();
            createRequest.Members = new EntityMembers();
            createRequest.ReturnCreatedIdentifiers = true;
            createRequest.Members.ModelId = new Identifier { Name = modelName };
            createRequest.Members.VersionId = new Identifier { Name = version };
            createRequest.Members.EntityId = new Identifier { Name = entityName };
            createRequest.Members.MemberType = memberType;
            createRequest.Members.Members = new System.Collections.ObjectModel.Collection<Member> { };
            Member newMember = new Member();
            newMember.MemberId = new MemberIdentifier() { Name = newName, Code = newCode, MemberType = memberType };

            createRequest.Members.Members.Add(newMember);
           
            EntityMembersCreateResponse createResponse = clientProxy.EntityMembersCreate(createRequest);
            //HandleErrors(createResponse.OperationResult);

        }


    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
//其他参考资料。。。
使用System.ServiceModel;
使用System.Collections.ObjectModel;
使用SAP___MDS.MDSTestService;//用于创建的服务引用。
名称空间SAP_to_MDS
{
类MDS连接器
{
//MDS服务客户端代理对象。
私有静态服务客户端客户端代理;
//在此处设置MDS URL(plus/Service/Service.svc)。
公共静态字符串mdsURL=@”http://myhost/MDS/service/Service.svc";
公共静态void Connect(){
标识符modelId=null;
字符串model=“PDM”;
字符串实体=“Werks”;
//“VERSION_1”是新型号的默认版本名。
字符串version=“version_1”;
尝试
{
//创建服务代理。
clientProxy=GetClientProxy(mdsURL);
clientProxy.ClientCredentials.UserName.UserName=“mydomain\\user”;
clientProxy.ClientCredentials.UserName.Password=“mypassword”;
控制台。写入线(“已连接…”);
}
捕获(例外情况除外)
{
WriteLine(“创建服务代理时出错:{0}”,例如);
返回;
}
//创建具有指定名称、代码和成员类型的实体成员(叶成员)。
字符串leafMemberCode=“Code”+Guid.NewGuid().ToString(“N”);
字符串leafMemberName=“Name”+Guid.NewGuid().ToString(“N”);
//CreateEntityMember(模型、版本、实体、leafMemberName、leafMemberCode、MemberType.Leaf);
createEntityMember(“PDM”、“Version_1”、“Werks”、“Number”、“1”、MemberType.Leaf”);
Console.ReadKey();
}
//创建MDS服务客户端代理。
专用静态服务客户端GetClientProxy(字符串targetURL)
{
//使用URL创建端点地址。
EndpointAddress endptAddress=新的EndpointAddress(targetURL);
//创建并配置WS-Http绑定。
WSHttpBinding wsBinding=新的WSHttpBinding();
//创建并返回客户端代理。
返回新的ServiceClient(wsBinding,endptAddress);
}
//创建具有指定名称、代码和成员类型的实体成员。
私有静态void createEntityMember(字符串模型名、字符串版本、字符串entityName、字符串newName、字符串newCode、MemberType MemberType)
{
EntityMembersCreateRequest createRequest=新EntityMembersCreateRequest();
createRequest.Members=newEntityMembers();
createRequest.ReturnCreatedIdentifiers=true;
createRequest.Members.ModelId=新标识符{Name=modelName};
createRequest.Members.VersionId=新标识符{Name=version};
createRequest.Members.EntityId=新标识符{Name=entityName};
createRequest.Members.MemberType=MemberType;
createRequest.Members.Members=new System.Collections.ObjectModel.Collection{};
成员newMember=新成员();
newMember.MemberId=newmemberidentifier(){Name=newName,Code=newCode,MemberType=MemberType};
createRequest.Members.Members.Add(newMember);
EntityMembersCreateResponse createResponse=clientProxy.EntityMembersCreate(createRequest);
//HandleErrors(createResponse.OperationResult);
}
}
}

使用NTLM身份验证解决了该问题:

clientProxy.ClientCredentials.Windows.AllowNtlm=true;
clientProxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain";
clientProxy.ClientCredentials.Windows.ClientCredential.UserName = "username";
clientProxy.ClientCredentials.Windows.ClientCredential.Password = "mypassword";