从PowerShell连接到WCF Rest服务应用程序不能按预期工作

问题描述:

我有一个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

我需要编辑IIS中托管服务的权限。所以我将用户({pcname}/Users)添加到允许的用户列表中。

我想删除的问题,但也许这可以帮助一个人在未来:)