通过ssl连接到wcf服务时出错

时间:2014-11-04 15:11:57

标签: c# web-services wcf ssl

我已经完成了wcf服务,发布了(我可以通过浏览器连接到它,我可以看到wsdl)但是当我尝试通过我编写的客户端程序来使用它时,我获得了一个“验证消息“message。”的安全性时发生错误。

一些细节:消费者和服务器在同一台机器上(所以这不是消费者和服务器之间不同步时间的情况),我使用自签名证书,该服务放在一个小节中一个更好的解决方案,它有一个专用的web.config来覆盖解决方案。

Web服务端的Web.config文件在消费者方面都是相同的(我只是从服务到消费者文件进行了复制和粘贴)。 Consumer使用basicHttpBinding和TransportWithMessageCredential连接,经过多次尝试,即使我已经通过Visual Studio工具创建了对服务的服务引用,在使用者代码中我再次指定绑定类型而不是端点地址。

正如我已经说过的,该服务使用自签名证书,我已经实现了验证类来验证不可信证书。

当我在我的消费者类中创建代理对象时,我没有收到任何错误,只有当我尝试在我的服务上使用任何方法时才收到它。我已经设置了tracelog,但它似乎没有显示任何错误,因为我能理解:

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
    <EventID>262165</EventID>
    <Type>3</Type>
    <SubType Name="Information">0</SubType>
    <Level>8</Level>
    <TimeCreated SystemTime="2014-10-30T10:41:32.4017455Z" />
    <Source Name="System.ServiceModel" />
    <Correlation ActivityID="{43c6480e-e3fe-4916-b3a3-efaa10881db5}" />
    <Execution ProcessName="w3wp" ProcessID="7004" ThreadID="6" />
    <Channel />
    <Computer>WKR1007R</Computer>
</System>
<ApplicationData>
    <TraceData>
        <DataItem>
            <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
            <TraceIdentifier>http://msdn.microsoft.com/it-IT/library/System.ServiceModel.Channels.RequestChannelReplyReceived.aspx</TraceIdentifier>
            <Description>Ricevuta risposta tramite il canale di richiesta</Description>
            <AppDomain>/LM/W3SVC/1/ROOT/PBEWS_Client_Test-1-130591392918713557</AppDomain>
            <Source>System.ServiceModel.Channels.BufferedMessage/2733477</Source>
            <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/MessageTraceRecord">
                <MessageProperties>
                    <Encoder>text/xml; charset=utf-8</Encoder>
                    <AllowOutputBatching>False</AllowOutputBatching>
                    <Security>
                        <IsAnonymous>False</IsAnonymous>
                        <WindowsIdentityUsed>False</WindowsIdentityUsed>
                    </Security>
                </MessageProperties>
                <MessageHeaders></MessageHeaders>
            </ExtendedData>
        </TraceRecord>
    </DataItem>
</TraceData>

只使用Fiddler我会发现错误:

  

Errore服务器nell'applicazione'/ PBEWS_Client_Test'。

              

Errore durante la verifica della sicurezza del messaggio。

                              Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente。 Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice,vedere la traccia dello stack。               

        <b> Dettagli eccezione: </b>System.ServiceModel.FaultException: Errore durante la verifica della sicurezza del messaggio.<br><br>

        <b>Errore nel codice sorgente:</b> <br><br>

        <table width=100% bgcolor="#ffffcc">
           <tr>
              <td>
                  <code><pre>

里加584:
Riga 585:public R ... Contracts.PolPolizza RecuperaPolizza(int idPolizza,bool modalita){ Riga 586:return base.Channel.RecuperaPolizza(idPolizza,modalita); 里加587:} 里加588:

              </td>
           </tr>
        </table>

        <br>

        <b> File di origine: </b> c:\..\PBEWS_Client_Test\Service References\ServiceReference1\Reference.cs<b> &nbsp;&nbsp; Riga: </b> 586
        <br><br>

        <b>Traccia dello stack:</b> <br><br>

        <table width=100% bgcolor="#ffffcc">
           <tr>
              <td>

[FaultException: Errore durante la verifica della sicurezza del messaggio.]

System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)+14799942    System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData,Int32 type)+622    PBEWS_Client_Test.ServiceReference1.PBEWS.RecuperaPolizza(Int32 idPolizza,Boolean modalita)+0    cE中的PBEWS_Client_Test.ServiceReference1.PBEWSClient.RecuperaPolizza(Int32 idPolizza,Boolean modalita):... \ PBEWS_Client_Test \ Service References \ ServiceReference1 \ Reference.cs:586    c中的PBEWS_Client_Test.PBEWS_TestForm.Button1_Click(Object sender,EventArgs e):... \ PBEWS_Client_Test \ PBEWS_TestForm.aspx.cs:103    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+155    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+3804

              </td>
           </tr>
        </table>

它表示“验证消息的安全性时发生错误”并引用Reference.cs,即Visual Studio工具在设置服务引用时创建的文件。从577到590的行包含以下代码:

public PBEWS_Client_Test.ServiceReference1.MRAnaAnagraficaBaseList RicercaAnagrafiche(System.Collections.Generic.List<Rgi.PassBroker.WCF.Contracts.CriterioRicercaWS> criteri) {
        return base.Channel.RicercaAnagrafiche(criteri);
    }

    public System.Threading.Tasks.Task<PBEWS_Client_Test.ServiceReference1.MRAnaAnagraficaBaseList> RicercaAnagraficheAsync(System.Collections.Generic.List<Rgi.PassBroker.WCF.Contracts.CriterioRicercaWS> criteri) {
        return base.Channel.RicercaAnagraficheAsync(criteri);
    }

    public Rgi.PassBroker.WCF.Contracts.PolPolizza RecuperaPolizza(int idPolizza, bool modalita) {
        return base.Channel.RecuperaPolizza(idPolizza, modalita);
    }

    public System.Threading.Tasks.Task<Rgi.PassBroker.WCF.Contracts.PolPolizza> RecuperaPolizzaAsync(int idPolizza, bool modalita) {
        return base.Channel.RecuperaPolizzaAsync(idPolizza, modalita);
    }

0 个答案:

没有答案