简体   繁体   English

MessageSecurityException没有为具有“http:// ...”操作的消息指定签名消息部分

[英]MessageSecurityException No signature message parts were specified for messages with the 'http://…' action

here is the config file used by both the client and the server 这是客户端和服务器使用的配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IPM_Service" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
            allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
              enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
                algorithmSuite="Default" establishSecurityContext="true" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8080/PM_Service"
          binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IPM_Service"
          contract="IPM_Service" name="WSHttpBinding_IPM_Service">
        <identity>

        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

this is the block of code where I get the error. 这是我得到错误的代码块。

            ProgrammingMaster_ServiceClient aClient = new ProgrammingMaster_ServiceClient();
            aClient.BeginProgrammingSession(0x01);
            aClient.Close();

The second line is where the exception happens at. 第二行是异常发生的地方。 ProgrammingMaster_ServiceClient is created using the svcutil.exe tool. 使用svcutil.exe工具创建ProgrammingMaster_ServiceClient

this is the code i'm using to start the server. 这是我用来启动服务器的代码。

public bool StartService(string aIp)
{
    string lsInstanceId = pFBlock.InstanceId.ToString();
    Uri loBaseAddr = new Uri(string.Format("http://localhost:808{0}/{1}", lsInstanceId, pFBlock.FBlockName));

    pLocalHost = new ServiceHost(typeof(Shadow_ProgrammingMasterService), loBaseAddr);

    Start(aIp);
    return IsHostOpen;
}

private void Start(string aIp)
{
    Shadow_ProgrammingMasterService.SetAPI(this);

    try
    {
        pLocalHost.AddServiceEndpoint(typeof(IProgrammingMaster_Service), new WSHttpBinding(), "PM_Service");

        ServiceMetadataBehavior loSmb = new ServiceMetadataBehavior();
        loSmb.HttpGetEnabled = true;
        pLocalHost.Description.Behaviors.Add(loSmb);
        try
        {
            pLocalHost.Open();
            IsHostOpen = true;
            pPM_Client = new ProgrammingMasterProxyClient(this, pOutput);
            pPM_Client.IpAddress = aIp;
            this.Subscribe(pPM_Client);
            pOutput.setComment("ProgrammingMasterService initialized");
        }
        catch (CommunicationException ce)
        {
            pOutput.setError(ce.Message);
            pLocalHost.Abort();
            IsHostOpen = false;
        }
    }
    catch (CommunicationException ex)
    {
        pOutput.setError(ex.Message);
        pLocalHost.Abort();
        IsHostOpen = false;
        //this.Unsubscribe(pOSTTSClient);
        //pOSTTSClient = null;
    }
}

anyone have any ideas of what could be causing this? 谁有任何想法可能导致这个?

The reason this occurs in your case is simply that the WCF service code itself has been modified, recompiled (and essentially deployed in the debugger) while the client, which has a now outdated service reference, is expecting and depending on something subject to that change and hence conflicts ensue. 在您的情况下发生这种情况的原因很简单, WCF服务代码本身已被修改,重新编译(并且基本上部署在调试器中),而客户端(具有现在过时的服务引用)正在期待并且取决于受此更改影响的内容因此发生了冲突。

Updating the service reference for the client will correct this problem. 更新客户端的服务引用将更正此问题。

To continue, the above is not to say you can't change any code within the service itself once it is referenced by a client (without breaking the client), however, so such a problem suggests substantial changes to parts of the service that the client is depending on, such as the signatures of exposed methods, existing DataMember properties of existing DataContract types and the like. 要继续,上述并不是说一旦客户端引用了服务本身就不能更改任何代码(不破坏客户端),但是,这样的问题表明服务的某些部分发生了重大变化。客户端依赖于,例如公开方法的签名,现有DataContract类型的现有DataMember属性等。

In contrast you can alter the method body of the existing service calls to your heart's content (the client doesn't care how the service works, just how to make it work); 相比之下,您可以将现有服务调用的方法体改变为您心中的内容(客户端不关心服务如何工作,如何使其工作); you can also add new members to existing composite DataContract types so that new clients may consume your updates readily, preventing DataType2 type scenarios with redundancy, and so on. 您还可以向现有复合DataContract类型添加新成员,以便新客户端可以轻松使用您的更新,从而阻止具有冗余的DataType2类型方案,等等。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 WCF没有为带有XXX操作的消息指定签名消息部分 - WCF No signature message parts were specified for messages with the XXX action C#WCF服务在消息“”上指定的SOAP操作与HTTP SOAP操作“ RealTimeTransaction”不匹配 - C# WCF Service The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'RealTimeTransaction' C# WCF SOAP 对消息“SendEcho”指定的操作与 HttpRequestMessageSendEcho 上指定的操作不匹配, - C# WCF The SOAP action specified on the message, '"SendEcho"', does not match the action specified on the HttpRequestMessageProperty, 'SendEcho' 消息部分时,SocketAsyncEventArgs和缓冲 - SocketAsyncEventArgs and buffering while messages are in parts 没有指定的端点可以访问 - None of the specified endpoints were reachable 签名验证失败。 没有提供安全密钥来验证签名 - Signature validation failed. No security keys were provided to validate the signature DotNetOpenAuth-邮件签名不正确 - DotNetOpenAuth - Message signature was incorrect 另一个MessageSecurityException问题 - Yet another MessageSecurityException issue RabbitMq:“没有一个指定的端点是可达的” - RabbitMq: "None of the specified endpoints were reachable" RabbitMQ:无法访问指定的端点 - RabbitMQ: None of the specified endpoints were reachable
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM