C#调用WebService时插入cookie
SOAPUI插入Cookie的方法
SOAP插入cookie的方法如下,点击Head,点击加号,然后直接设置就可以了。
C#中调用webService时插入Cookie
由于调用的时候必须要带上cookie,才能成功获取到数据,而正常的通过引用服务,C#会生成一堆代码,但那只是个空壳子,并没有设置cookie的地方。在网上找了很多资料,最后找到了方法,在此总结一下,以便其他人少走弯路。
由于我们是客户端,服务端无法控制,所以网上找到那些设置config,什么启用cookie啊,都是没用的,除非你是正在开发的是服务端+客户端。这里我们主要讨论的是调用方,我只有一个wsdl的地址,服务端不可控制的情况。
客户端(web应用)并不会自动发送cookie到wcf。所以客户端还得做更多的工作
- 核心在IClientMessageInspector 这个接口,他有BeforeSendRequest和AfterReceiveReply两个方法。
-
我们要新建一个类CookieBehavior.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public class CookieBehavior : IEndpointBehavior { private string SID { get ; set ; } public CookieBehavior( string pSid) { SID = pSid; } public void Validate(ServiceEndpoint endpoint) { return ; } public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { return ; } public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { return ; } public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior) { behavior.MessageInspectors.Add( new CookieMessageInspector(SID)); } } |
-
建立一个类CookieMessageInspector,继承IClientMessageInspector,实现他的BeforeSendRequest和AfterReceiveReply两个方法。12345678910111213141516171819202122232425262728293031323334353637383940
public
class
CookieMessageInspector : IClientMessageInspector
{
private
string
SID {
get
;
set
; }
public
CookieMessageInspector(
string
pSid)
{
SID = pSid;
}
public
object
BeforeSendRequest(
ref
Message request, System.ServiceModel.IClientChannel channel)
{
var
cookie =
"SID="
+ SID;
HttpRequestMessageProperty httpRequestMessage;
object
httpRequestMessageObject;
if
(request.Properties.TryGetValue(HttpRequestMessageProperty.Name,
out
httpRequestMessageObject))
{
httpRequestMessage = httpRequestMessageObject
as
HttpRequestMessageProperty;
if
(
string
.IsNullOrEmpty(httpRequestMessage.Headers[
"Cookie"
]))
{
httpRequestMessage.Headers[
"Cookie"
] = cookie;
}
}
else
{
httpRequestMessage =
new
HttpRequestMessageProperty();
httpRequestMessage.Headers.Add(
"Cookie"
, cookie);
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
}
return
null
;
}
public
void
AfterReceiveReply(
ref
Message reply,
object
correlationState)
{
return
;
}
}
- 通过vs添加服务引用,他会自动生成一个代理类。在new这个代理类之后,加入我们新建的behavior
1 2 3 4 | WokSearchLiteClient searchLiteClient = new WokSearchLiteClient(); CookieBehavior c = new CookieBehavior(authentKey); searchLiteClient.Endpoint.Behaviors.Add(c); var ret = searchLiteClient.search(searchRequest.queryParameters, searchRequest.retrieveParameters); |
这样就完成了,带cookie的webService调用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!