1. 程式人生 > >asp.net 呼叫帶證書的webservice解決辦法

asp.net 呼叫帶證書的webservice解決辦法

最近在朋友弄一個調整省政府政務工作流的程式。。

需要把當前的資訊推送到政務網上,採用的是帶證書的https webservice。。

下面說一下實現過程

第一步,引用webservice地址,刪除web.config中相關配置。同時安裝好證書

用如下資料替換:

  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="IServiceSoapBinding" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
          <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
        messageVersion="Soap11" writeEncoding="utf-8">
            <!-- 政務大廳介面需要使用Soap11 -->
            <readerQuotas maxDepth="32" maxStringContentLength="819200000" maxArrayLength="1638400000"
              maxBytesPerRead="4096000" maxNameTableCharCount="16384000" />
          </textMessageEncoding>
          <httpsTransport manualAddressing="false" maxBufferPoolSize="52428800"
            maxReceivedMessageSize="6553600" allowCookies="false" authenticationScheme="Anonymous"
            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            keepAliveEnabled="true" maxBufferSize="6553600" proxyAuthenticationScheme="Anonymous"
            realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
            useDefaultWebProxy="true" requireClientCertificate="true" />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="https://WebService網址/CXFWebService/webservice/iservice" behaviorConfiguration="endpointBehavior1" binding="customBinding" bindingConfiguration="IServiceSoapBinding" contract="ZwdtServices.IService" name="ServiceImplPort" />
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointBehavior1">
          <dataContractSerializer maxItemsInObjectGraph="209715200"/>
          <clientCredentials>
            <clientCertificate  findValue="證書使用者" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
            <serviceCertificate>
              <authentication certificateValidationMode="None"/>
              <!--<defaultCertificate findValue="ShanXi Digital Certificate Authority" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My"/>-->
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

但在實際呼叫時,提示找不到對應的證書使用者

我猜測可能是iis使用者訪問證書有關,那麼就在使用者和計算機上都匯入證書。執行MMC,開啟兩個證書管理器,都把證書匯入一次。

如圖


完成之後,果然錯誤不一樣。。

繼續執行,出現沒有許可權的錯誤


繼續設計證書許可權

OK完成。。。。。