2017-10-13 74 views
-1

我有一個WCF服務應用程序設置,所以當我調用地址它只是返回true。從PowerShell連接到WCF Rest服務應用程序不能按預期工作

IRemoteService.cs

 [OperationContract] 
      [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, 
       BodyStyle = WebMessageBodyStyle.Wrapped, 
       UriTemplate = "ValidationResult/")] 
      bool ValidationResult(); 

RemoteService.svc.cs

namespace RemoteService 
{  
    public class RemoteService : IRemoteService 
    { 
     public bool ValidationResult() 
     { 
      return true; 
      //throw new NotImplementedException(); 
     } 
    } 
} 

我添加的IIS應用程序,現在我可以在以下網址訪問該服務:

https://localhost/ValidationServiceApp/RemoteService.svc/validationresult/ 

此回報:

{"ValidationResultResult":true} 

工程很好。但是,當我運行下面的PowerShell腳本,我不能訪問服務:

$url = "https://localhost/ValidationServiceApp/SASRemoteService.svc/validationresult/" 
$result = Invoke-RestMethod -Method GET -Uri $url 
Write-Host $result 

我必須指出,我已經嘗試了所謂的「我只休息」客戶端應用程序,這將返回什麼預期。所以我認爲它必須與PowerShell有關。要麼我沒有允許在web.config文件中的某些設置或在PowerShell中缺少一些設置。我也試圖忽略PowerShell中的證書錯誤。這沒有幫助。從PowerShell的

錯誤:

Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send. 
At line:18 char:11 
+ $result = Invoke-RestMethod -Method GET -Uri $url 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException 
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand 

下面是該服務的web.config文件:設法找到問題

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.6"/> 
    <httpRuntime targetFramework="4.6"/> 
    <httpModules> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/> 
    </httpModules> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <webHttpBinding>  
     <binding name="webHttpTransportSecurity"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" proxyCredentialType="None" /> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="RemoteService.RemoteService" behaviorConfiguration="ServiceBehaviour"> 

     <endpoint address ="" 
        binding="webHttpBinding" 
        contract="RemoteService.IRemoteService" 
        bindingConfiguration="webHttpTransportSecurity" 
        behaviorConfiguration="web" /> 

     <endpoint address="mex" 
        binding="mexHttpsBinding" 
        contract="IMetadataExchange" />   

     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehaviour"> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 

     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <protocolMapping> 

     <add binding="webHttpBinding" scheme="https"/> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="ApplicationInsightsWebTracking"/> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" 
     preCondition="managedHandler"/> 
    </modules> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true"/> 
    <validation validateIntegratedModeConfiguration="false"/> 
    </system.webServer> 

</configuration> 
+0

你能夠瀏覽'的https:// esukpc70/ValidationServiceApp ....'使用從客戶機瀏覽器? –

+0

@ChetanRanpariya我在我自己的機器上運行所有的東西。我可以從我的瀏覽器和客戶端應用程序訪問該URL,但我不能從PowerShell訪問 – thatOneGuy

+0

更新了問題,以顯示即時通訊與本地工作 – thatOneGuy

回答

-1

我需要編輯IIS中託管服務的權限。所以我將用戶({pcname}/Users)添加到允許的用戶列表中。

我想刪除的問題,但也許這可以幫助一個人在未來:)