C# 主数据服务使用WCF服务创建实体成员
我正在尝试使用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
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";