C# 调用webservice错误An error was discovered processing the <wsse:Security> header

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Web;
using System.Xml;
using System.Xml.Serialization;

namespace WebApplication1
{
public class SecurityHeader : MessageHeader
{
private readonly UsernameToken _usernameToken;

public SecurityHeader(string id, string username, string password)
{
_usernameToken = new UsernameToken(id, username, password);
}

public override string Name
{
get { return "Security"; }
}

public override string Namespace
{
get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; }
}

protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
XmlSerializer serializer = new XmlSerializer(typeof(UsernameToken));
serializer.Serialize(writer, _usernameToken);
}
}

[XmlRoot(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
public class UsernameToken
{
public UsernameToken()
{
}

public UsernameToken(string id, string username, string password)
{
Id = id;
Username = username;
Password = new Password() { Value = password };
}

[XmlAttribute(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")]
public string Id { get; set; }

[XmlElement]
public string Username { get; set; }

[XmlElement]
public Password Password { get; set; }
}

public class Password
{
public Password()
{
Type = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText";
}

[XmlAttribute]
public string Type { get; set; }

[XmlText]
public string Value { get; set; }
}
}

调用

void Test(){

  

ServiceReference1.recvCustomer rc = new ServiceReference1.recvCustomer
{
reqInfo = "123",
reqData = "456"
};
ServiceReference1.WS_ESB_CustomerRecvPortTypeClient client = new ServiceReference1.WS_ESB_CustomerRecvPortTypeClient();

using (new OperationContextScope(client.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(
new SecurityHeader("UsernameToken-49", "username", "password"));
var ss= client.recvCustomer(rc);
}

}

第二种方法:

web.config直接配置

<client>
<endpoint address="http://61.191.200.162:5888/services/WS_ESB_CustomerRecv"
binding="customBinding" bindingConfiguration="WS_ESB_CustomerRecvSoap12Binding"
contract="ServiceReference1.WS_ESB_CustomerRecvPortType" name="WS_ESB_CustomerRecvHttpSoap12Endpoint">

<headers>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>UserName</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">wsse:[email protected]</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</headers>
</endpoint>
</client>

原文地址:https://www.cnblogs.com/zxk5625/p/9257671.html

时间: 2024-10-30 18:22:12

C# 调用webservice错误An error was discovered processing the <wsse:Security> header的相关文章

SQL调用存储过程错误Internal error when parsing callable statement metadata (missing parameter type)

[6 Apr 2005 15:29] Chadwick Baatz Description: When calling a stored procedure with datatype Decimal(m,d) (i.e. Decimal(18,0)) the Connector/J library throws the exception below. After looking into the code it appears that the getCallStmtParameterTyp

jQuery的ajax调用webservice返回XML数据传参错误

jQuery的ajax调用webservice返回XML数据传参错误: 有时候使用jquery的ajax调用带有参数的webservice返回XML格式输出的时候,会出现传参错误,当然错误的原因可能是多种多样的,下面就简单介绍一种. 一.错误代码: 1.ajax代码: $.ajax({ type:"post", url:"_service.asmx/getDataFromATable", data:" { tablename: temp }",

c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法

最近项目中需要实现一个服务器宕机后短信提醒的功能,个人觉得在使用Python 写http请求这块很方便,发短信这块就使用了python,但是c++程序中调用这个脚本时,编译不通过,提示如下错误: error LNK2001: 无法解析的外部符号 __imp_PyString_FromStringerror LNK2001: 无法解析的外部符号 __imp_PyCallable_Check error LNK2001: 无法解析的外部符号 __imp_PyObject_CallObjecterro

Android通过ksoap2这个框架调用webservice大讲堂

昨天有人问我Android怎么连接mysql数据库,和对数据库的操作呀,我想把,给他说说json通信,可是他并不知道怎么弄,哎算了吧,直接叫他用ksoap吧,给他说了大半天,好多零碎的知识,看来还是有必要把这些东西整合起来,一方面自己有时候也看,另一方面当然是能帮助没有做个的小伙伴,其实东西不是很多,就是讲的有点详细,不怕多,就怕不仔细, WebServices简介 Web services是一种部署在Web上的对象或者组件,能够通过Internet进行调用的应用程序.Web services

调用webservice 总结

最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice . 我们都知道,调用webserivice 最简单的方法就是在 "引用"  那里点击右键,然后选择"引用web服务",再输入服务地址. 确定后,会生成一个app.config 里面就会自动生成了一些配置信息. 现在正在做的这个项目就不能这么干.后来经过一番搜索,就找出另外几种动态调用webservice 的方法. 废话少说,下面是webservice 代码 u

动态调用WebService(C#) (非常实用)

前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 RESTful 架构风格的.但到目前为止,WebService 在一些Public Institution 中使用还是十分广泛的. 这里主要讨论一下关于WebService的调用问题.关于WebService 的调用分为静态调用和动态调用两种,外加直接Http请求方式 静态调用 静态调用的方式是通过“Add

curl通过调用WebService查询当前天气

<?php /** * curl通过调用WebService查询北京的当前天气 */ header("Content-type: text/html; charset=utf-8"); $data = 'theCityName=北京';//传递的参数 $curl_obj = curl_init(); //初始化一个cURL会话 //设置URL和相应的选项 curl_setopt($curl_obj, CURLOPT_URL, "http://www.webxml.com

C# 调用webservice 几种办法(转载)

原文地址: http://www.cnblogs.com/eagle1986/archive/2012/09/03/2669699.html //================================================================================================= 动态调用示例: 方法一: 看到很多动态调用WebService都只是动态调用地址而已,下面发一个不光是根据地址调用,方法名也可以自己指定的,主要原理是根据指定

Jquery ajax调用webservice总结

jquery ajax调用webservice(C#)要注意的几个事项: 1.web.config里需要配置2个地方 <httpHandlers>      <remove verb="*" path="*.asmx"/>      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script