c# - Master Data Services 使用 WCF 服务创建实体成员
问题描述
我正在尝试使用 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);
}
}
}
解决方案
通过使用 NTLM 身份验证解决了该问题:
clientProxy.ClientCredentials.Windows.AllowNtlm=true;
clientProxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain";
clientProxy.ClientCredentials.Windows.ClientCredential.UserName = "username";
clientProxy.ClientCredentials.Windows.ClientCredential.Password = "mypassword";
推荐阅读
- android - Android根据时间切换到下一个项目
- javascript - 从 javascript 中的变量中获取值并传递给 List<> 类型的代码隐藏变量
- regex - Python 中的正则表达式。检查电话号码的有效性
- c++ - 如何在 C++ 中使用 boost xml 从 xml 文件中读取特定值?
- locust - 如何使用 locust 中的路径变量聚合来自请求的统计信息?
- c# - EF 核心:为什么添加子行但自动添加父行项?
- javascript - 将 JsonResponse 数据(来自 Django 视图)作为 Javascript 中的 url 参数传递不起作用
- snowflake-cloud-data-platform - 将雪花表中的列修改为集群键
- spring - Spring Boot 等大型捆绑开源项目如何确保模块之间的兼容性?
- reactjs - Material-UI FormControl InputLabel显示问题