Pos*_*Guy 2 asp.net web-services
这与.NET有关.我决定使用Web服务参考而不是Web服务...我认为虽然下面的问题确实适用于这两种情况,但我想尝试全面了解这一点.
所以这是我的问题. 我先来解释一下我来自哪里.在过去的一个项目中,我之前通过创建手动类(例如GetPicturesRequest.cs和GetPicturesResponse.cs)与一些API进行了交谈,例如,它将为我保留状态.我有一个名为Request.cs的基类,它实际发送了api调用:
Stream requestStream;
Stream responseStream;
XmlDocument doc = new XmlDocument();
doc = CreateRequestXML();
// Determins if API call needs to use a session based URI
string requestURI = UseAuthURI == true ? _requestURIAuthBased + JSessionID : _requestURI;
byte[] data = XmlUtil.DocumentToBytes(doc);
// Create the atual Request instance
HttpWebRequest request = CreateWebRequest(requestURI, data.Length);
request.ContentLength = data.Length;
request.KeepAlive = false;
request.Timeout = 30000;
// Send the Request
requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
Run Code Online (Sandbox Code Playgroud)
现在我想使用Web服务参考.所以我指出并在VS 2008中创建了对https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl的新引用.我现在有一个Web引用.
我现在有这些问题作为第一次使用Web服务而不是手动操作,因为我使用的是第三方API:
1)如何指定标题参数?例如,某些API要求您发送散列(签名),sessionID,用户名,密码,并将其与API方法调用请求一起命名.如何使用Web服务代理类指定它?
2)如何处理请求/响应对象或者我现在不需要担心这是因为我正在使用Web服务/引用?我的意思是我还需要创建一个请求对象,我将如何收到响应?
3)当我收到响应时,代理类是否包含其状态,或者在使用Web服务/引用时是否还必须创建一个类来保存API方法调用响应中返回数据的状态?
4)我什么时候只想像以前那样创建自定义代码而不是使用WSDL的web服务/引用选项?...基本上创建我自己的代理类,请求对象,响应对象,一切?而不是让VS吐出基于WSDL的Web引用?是因为它不是基于SOAP的第三方API吗?是因为第三方API没有提供WSDL,那么你不得不亲自手工编写包装器代码?
这里有很严重的混乱.大家请停下来!
WSE已经过时了.不要使用它.
"Web引用"与旧的ASMX Web服务技术相关.微软现在认为它是"遗留"代码,并已停止修复错误.如果您不需要,请不要使用它.
OP应使用"添加服务引用".我只是尝试过它,它起作用了.
现在,问你的问题:
如何指定标题参数?
由于此服务使用标头,因此代理类已生成为消息合同,消息合同可以包含标题部分和正文部分.例如,RefundTransactionRequest该类具有RequesterCredentials属性CustomSecurityHeaderType类型的属性.您只需在发送请求之前设置它.事实上,它已经生成了一个构造函数RefundTransactionRequest,它将标题和正文作为参数,因此这很容易.
请求/响应对象是如何处理的?
除了创建类的实例和调用方法之外,您不必执行任何操作.所有序列化都是为您完成的.所有的课程创作都是为您完成的.
当我收到响应时,Proxy类是否包含其状态?
是.代理类将包含所有邮件头和正文部分.当然,如果有输出标题,则只有标题部分.
我什么时候想要像以前一样创建自定义代码而不是使用WSDL的web服务/引用选项?
从来没有,我想.我从未见过这样做的理由.我想唯一的一次是"添加服务参考"中有错误.
例:
using (var svc = new PayPalAPIAAInterfaceClient())
{
var paypal = (PayPalAPIInterface) svc;
var credentials = new CustomSecurityHeaderType
{
Credentials =
new UserIdPasswordType
{
AppId = "",
Username = "John",
Password = "John"
}
};
var request = new RefundTransactionRequestType
{
Amount =
new BasicAmountType
{
currencyID = CurrencyCodeType.USD,
Value = "100.00"
},
Memo = "I want my money back",
RefundType = RefundType.Full,
RefundTypeSpecified = true
};
var refundRequest = new RefundTransactionReq
{RefundTransactionRequest = request};
var result =
paypal.RefundTransaction(
new RefundTransactionRequest(credentials, refundRequest));
var response = result.RefundTransactionResponse1;
var returnedCredentials = result.RequesterCredentials;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10770 次 |
| 最近记录: |