2017-10-16 1 views
2

Ich habe einen WCF-Dienst eingerichtet, der über den Browser funktioniert. Er gibt das erwartete Ergebnis zurück. Nun, wenn es über Powershell zuzugreifen versuchen, erhalte ich diese StörungKann über den Browser auf den WCF-Dienst zugreifen, aber nicht über einen GET in der PowerShell

Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send. 

Ich bin Hosting dies auf IIS als eine Anwendung, die an der Stelle des Dienstes auf meinem System verweist, genannt „ValidationServiceApp“ Also ich darauf zugreifen kann via: "https://myPc/ValidationServiceApp/RemoteService.svc/validationresult/"

Hier ist die Powershell-Code:

[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true} #handle unsigned certs as its on my local machine on IIS 
$testurl = "https://myPc/ValidationServiceApp/RemoteService.svc/validationresult/" 
$result = Invoke-WebRequest -Method GET -Uri $testurl 
Write-Host $result 

der Service in VS:

IRemoteService.cs

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

RemoteService.svc.cs

public bool ValidationResult() 
{ 
    return true; 
    //throw new NotImplementedException(); 
} 

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> 

Antwort

1

Betrachten Sie das New-WebServiceProxy Cmdlets zu verwenden, wenn mit einem WCF-Webservice in Powershell arbeiten.

$proxy= New-WebServiceProxy -Uri "https://myPc/ValidationServiceApp/RemoteService.svc" 
# retrieve available methods: 
$proxy | Get-Member 
+0

Aber ich benutze REST nicht SOAP richtig? – thatOneGuy

+0

Natürlich haben Sie Recht. Ich meinte WCF :) –

+0

beim Versuch, auf die URL zuzugreifen, die Sie angegeben haben, dh der Dienst nicht die Methode innerhalb des Dienstes, bekomme ich: New-WebServiceProxy: Die Anfrage fehlgeschlagen mit HTTP-Status 404: Nicht gefunden, und beim Versuch, auf die zuzugreifen Methode, die ich bekomme: New-WebServiceProxy: Das Dokument an der URL https: //mypc/ValidationServiceApp/SASRemoteService.svc/validationresult/ wurde nicht als bekannter Dokumenttyp erkannt. Irgendwelche Ideen ? – thatOneGuy

Verwandte Themen