【发布时间】:2018-04-24 16:35:50
【问题描述】:
我在用 C# 调用 Web 服务请求时遇到问题。
服务和请求在 Soap UI 中运行良好,启用了“预先验证”选项(文件、首选项、HTTP 设置)。如果不启用此设置,服务将返回“Java.Lang.NullPointerException”。
我遇到的问题是我不知道如何在 C# 上下文中启用此设置。
我有一个 .NET 3.5 类库,其中包含对特定服务的所谓服务引用。这是一个简单的代码sn -p;
try
{
CatalogService.CatalogChangeClient service = new CatalogService.CatalogChangeClient();
service.ClientCredentials.UserName.UserName = "fancydress";
service.ClientCredentials.UserName.Password = "47fda9cb4b51a9e";
service.ClientCredentials.SupportInteractive = true;
ProductUpdate[] products = new ProductUpdate[1];
products[0] = new ProductUpdate();
products[0].ProductCode = "00001";
products[0].ProductDescription = "TestProduct";
string result = service.UpdateProducts(products);
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
第一次回复后更新。
CatalogService.CatalogChangeClient 类似乎实现了 WCF 抽象类
System.ServiceModel.ClientBase<TChannel>
结束更新
谁能帮我设置这个属性?
【问题讨论】:
-
请显示更多代码,尤其是。接口
CatalogService.CatalogChangeClient实现 -
它似乎正在从 WCF 实现 System.ServiceModel.ClientBase 类: public partial class CatalogChangeClient : System.ServiceModel.ClientBase
, Fancydress.ResourceAccess.MCSF .CatalogService.CatalogChange -
据我所知,这是 .NET 实现中的一个问题,它会发送请求,并且只有当它从服务中获得 401 时才会使用凭据重新发送...您的 Java WebService 似乎没有发送401 - 虽然你应该首先确认情况确实如此(即WireShark)......如果是这样:为了规避这个我怀疑你将不得不使用一个不同的客户端(代理),它可以被“欺骗”发送凭据总是...
-
Yahia,你是正确的。使用 WireShark,我能够确认 java web 服务没有发送 401。所以是的,我需要一个不同的代理来始终发送凭据。谢谢!
标签: c# web-services