Tag: web services

如何以编程方式将信息发送到C#with .NET中的Web服务?

我知道这有点像重新发明轮子,但我需要知道通过http / soap / xml和Web消息与Web服务进行通信。 原因是我需要与第三方Web服务进行通信才能工作,但是WSDL或其他东西有问题,并且在使用.NET向导连接它时它不起作用。 所以,任何人都可以给我一个过程/简单的例子/等。 怎么做或任何人都可以给我一个解释它的地方的链接? 我对网络请求和响应并不十分了解。 如何构建和发送请求? 我该如何解析回复? 这是一个简单的Web服务的代码。 假装.asmx的地址是“http://www.mwebb.com/TestSimpleService.asmx”: using System; using System.Data; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace TestSimpleService { [WebService] public class Soap : System.Web.Services.WebService { [WebMethod] public string SayHello(string name) { return “Hello ” + name + “!”; } } } 我怎么称呼这种方法? 任何帮助表示赞赏。 编辑 我真的只是想知道如何将数据发送到Web服务。 我可以获取所有方法/ SOAP操作/ […]

如何更改webClient.UploadData()的时间限制?

我正在使用WebClient.UploadData()在Java服务器上发布post。 我该如何延长时限? (每次我尝试进行一些调试时都会超时)

模仿和NetworkCredential

我需要将具有当前模拟用户凭据的NetworkCredential对象从asp.net应用程序传递给Web服务。 我的代码如下所示: WindowsIdentity windowsIdentity = HttpContext.Current.User.Identity as WindowsIdentity; WindowsImpersonationContext context = windowsIdentity.Impersonate(); try { var client = GetClient(); client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; Log(“WindowsIdentity = {0}”, windowsIdentity.Name); Log(“DefaultNetworkCredentials = {0}”, CredentialCache.DefaultNetworkCredentials.UserName); client.DoSomething(); } finally { context.Undo(); } 我已经了解CredentialCache.DefaultNetworkCredentials应该提供当前模拟用户的凭据,但事实并非如此。 我得到的日志消息是 WindowsIdentity = TESTDOMAIN\TESTUSER DefaultNetworkCredentials = 难道我做错了什么? 如果是这样,您如何获得当前模拟用户的NetworkCredential对象?

以编程方式使用wsdl创建代理并使用wsdl解析

我正在研究XML Web服务。 我的客户端Web服务“客户端”在运行时具有服务器Web服务“服务”的wsdl的URL。 为了让“客户”使用“服务”,我需要“以编程方式”执行以下操作: 1)从“服务”或磁盘上的某个位置动态获取wsdl文件。 2)以编程方式创建代理,即不使用wsdl.exe或添加Web引用。 3)在创建的代理上调用方法。 有可能吗? 如果有人做了,那么采取任何建议如何实现将是非常好的。

身份validation失败,因为远程方在从Web服务获取响应时已关闭传输流exception

我正在调用第三方服务,当我要求回复时,它会抛出一个exception “身份validation失败,因为远程方已关闭传输流exception”。 我认为发送凭据存在问题。 我甚至尝试过提供新的凭据。 这是完整的代码 string get_url = “https://**.*******.com/com/******/webservices/public_webservice.cfc?wsdl&Method=CreateUser&SiteID=**&WSPassword=******&UserName=******”; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_url); request.MaximumAutomaticRedirections = 4; request.MaximumResponseHeadersLength = 4; request.Credentials = CredentialCache.DefaultCredentials; //request.UseDefaultCredentials = false; //request.Credentials = new System.Net.NetworkCredential(“*****”, “*****”); request.ContentType = “application/x-www-form-urlencoded; charset=ISO-8859-1”; // Show the sent stream //lbl_send_stream.Text = send_stream; //lbl_send_stream.Text = get_url; // Get UserId And LoginToken From Third Party DB // […]

SOAP使用C#

你如何使用C#使用SOAP? 有一个简单但有效的教程吗?

.Net WebServices和out / ref WebMethod参数

我收到了一些供应商提供的关于他们正在发布的网络服务的文档,他们非常具体地说,在他们的一个WebMethod上,一个参数有out修饰符(?不确定这是否是正确的描述符),例如考虑以下WebMethod签名: [WebMethod] public void HelloWorld(out string strVal) { strVal = “Hello World”; } [显然实际方法不是Hello World方法] 现在,我从未考虑使用out / ref参数设计WebMethod,它让我想知道为什么他们会使用它。 试图理解这个设计决策的应用程序我把一个原型和几个基本的Hello World样式webmethods一起抛出…一个带有单个字符串参数,一个带有两个字符串参数,一个没有接收任何参数但是返回一个字符串。 在尝试从单独的应用程序引用我的web方法时,我注意到我必须使用单输出字符串参数来访问该方法,就像我定义了输出字符串的方法一样,以便在客户端方面有效: public string HelloWorld1() { return “Hello World”; } 和 public void HelloWorld2(out string strVal) { strVal = “Hello World”; } 是完全一样的…因为我必须同样引用它们[其中x代替正确的方法]: string val = HelloWorldX(); 尝试以我访问它们的方式引用方法,如果它们不是Web方法[如此]: string val = string.Empty; MyService1.HelloWorld(out val); Console.WriteLine(val); 这会导致编译错误,指出没有方法参数接受1输入。 […]

(尝试)从WSE 3.0迁移到WCF以获取客户端代码

为此我一直都在网上。 我刚刚做了一段时间的恶魔,我试图消费的网络服务供应商拒绝正式支持WCF作为消费方法。 我不是网络服务专家,所以我会尽力记录和解释这篇文章,但无论如何,如果你需要的话,请求更多的信息,希望我能够提供任何必要的东西。 服务 在我的公司,我们使用公开服务的供应商应用程序。 应用程序是用java编写的,看起来wsdl是用Apache Axis 1.2创建的。 代码 我的遗留代码使用WSE 3.0。 特别是,它使用最后自动添加“WSE”的代理类。 这允许我使用更简单的身份validation方案(我可以使它工作的唯一方法)。 我不需要使用证书。 我使用SecurityPolicyAssertion的衍生物,并将其包装在一个Policy对象中,该对象被传递给客户端类的SetPolicy方法。 以下是创建客户端工作实例所需的全部内容: MyWebServiceWse api = new MyWebServiceWse(); api.Url = myUrl; api.SetPolicy(new Policy(new MyDerivedSecurityAssertion(user, pass))); 我的默认,开箱即用的WCF代码(使用服务引用生成)不接受凭据,所以我知道现在有一个问题。 我在网上阅读了有关在app.config使用不同security或绑定设置的各种内容,但没有任何内容完全奏效。 在大量修补之后我最常见的错误是WSDoAllReceiver: Request does not contain required Security header 。 这是app.config。 也许我们可以先告诉我这里应该改变什么来促进传递证书 – 再次,我在网上看到了不同的意见。 我已经改变了一些属性来模糊我们正在使用的特定服务(公司政策和所有这些)。 这是目前为止的示例C#代码(在控制台应用程序中测试): MyClient client = new MyClient(); client.listMethod(); UPDATE 阅读此SOpost: wcf security。 […]

在执行长时间运行的数据库任务时处理Web服务超时

我们的产品之一的架构是典型的3层解决方案: C#客户端 WCF Web服务 SQL Server数据库 客户端从Web服务请求信息。 Web服务命中数据库以获取信息并将其返回给客户端。 这是问题所在。 其中一些查询可能需要很长时间,而且我们不知道哪些查询会很慢。 我们知道一些通常比其他人慢,但即使是最简单的请求,如果有足够的数据,也会很慢。 有时使用查询或运行大量数据的报告。 只有在大量数据减慢之前,才能优化查询。 如果数据库中的查询在SQL Server中达到最大查询超时,则数据库查询将终止,并且Web服务会向客户端返回错误。 这是理解的。 我们可以处理这些错误。 客户端正在等待Web服务调用完成。 如果数据库调用需要很长时间,则客户端可能会在调用Web服务时超时。 客户端放弃,但数据库请求继续处理。 此时,客户端与数据库不同步。 数据库调用可能成功也可能不成功。 可能有错误。 客户永远不会知道。 在某些情况下,我们不希望我们的用户发起另一个请求,如果完成上一个请求,可能会导致无效状态。 我很想知道其他人是如何处理这个问题的。 您使用了哪些策略来防止Web服务超时影响数据库调用? 我能提出的最好的想法包括在某个地方创建一个实际的数据库层 – 在Web服务内部,附加到消息队列 – 某些东西。 将每个查询卸载到另一个进程似乎过多。 (然后,我们并不总是知道给定的请求是快还是慢。) 如果我们可以将发出HTTP请求的行为与启动和运行数据库进程的行为分开,那就太好了。 我已经在之前的公司看到过使用自定义服务器,但它使用的是直接套接字通信,而我宁愿避免使用某些自定义应用程序替换Web服务。 请注意,鉴于我们处理的数据量,我们都在进行查询优化。 查询优化,索引等只会在数据量很大时才将您带到目前为止。 有时事情需要很长时间。

如何模拟Web服务

我是否必须重写我的代码才能在界面中执行此操作? 或者有更简单的方法吗? 我正在使用Moq