当前位置: 代码迷 >> Web Service >> WCF调用JAVA webservice 采用usernametoken header有关问题
  详细解决方案

WCF调用JAVA webservice 采用usernametoken header有关问题

热度:414   发布时间:2016-05-02 02:36:03.0
WCF调用JAVA webservice 采用usernametoken header问题
现在建了一个WCF服务,对方采用usernametoken验证没有加密,调用时候总是提示
"An error was discovered processing the <wsse:Security> header”
我在客户端也加入了
client.ClientCredentials.UserName.UserName = "admin";
client.ClientCredentials.UserName.Password = "123456";
求解!!!!!急!!!!!!
wcf webservice

------解决方案--------------------
应该通过 SoapHeader。
------解决方案--------------------
这个问题比较复杂。我给你解决吧!需要你对WebService理解稍微深入一点,这是因为Java采用usernametoken验证,C#调用的时候并不会在SoapHeader里包含身份信息,需要自己实现
之前也是遇到这个问题,网上很多讲怎么解决这个问题,实际上没有一个能解决的!我给你直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel.Description;
using System.ServiceModel;
using System.ServiceModel.Security;
using System.Text;
using System.Security.Cryptography;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;
using System.Xml;
using System.ServiceModel.Configuration;
using System.Xml.Serialization;
using System.IO;
using System.Runtime.Serialization;

namespace JavaWebServiceCaller
{

    public class CustomClientMessageInspector : IDispatchMessageInspector, IClientMessageInspector
    {
        public string UserName { get; private set; }
        public string Password { get; private set; }

        public CustomClientMessageInspector()
        {

        }
        public CustomClientMessageInspector(string userName, string password)
        {
            UserName = userName;
            Password = password;
        }
        #region Message Inspector of the Service

        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {

            return null;
        }

        public void BeforeSendReply(ref Message reply, object correlationState)
        {
        }

        #endregion

        #region Message Inspector of the Consumer

        public void AfterReceiveReply(ref Message reply, object correlationState)
        {
        }

        public object BeforeSendRequest(ref Message request, IClientChannel channel)
  相关解决方案