简体   繁体   English

Master Data Services 使用 WCF 服务创建实体成员

[英]Master Data Services create entity member using The WCF Service

I'm trying to create entity member using WCF service.我正在尝试使用 WCF 服务创建实体成员。

But the line但是线

EntityMembersCreateResponse createResponse = clientProxy.EntityMembersCreate(createRequest);

raising the following error:引发以下错误:

An unhandled exception of type 'System.ServiceModel.Security.SecurityNegotiationException' occurred in mscorlib.dll mscorlib.dll 中发生类型为“System.ServiceModel.Security.SecurityNegotiationException”的未处理异常

Additional information: The caller was not authenticated by the service.**附加信息:调用者未经服务验证。**

Could somebody help me?有人可以帮助我吗?

I use following code:我使用以下代码:

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);

        }


    }
}

The problem was solved by using NTLM authentification:通过使用NTLM身份验证解决了该问题:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM