2010-12-16 32 views
2

私はPowerShellコマンドNew-WebServiceProxyを使用してWCFサービスへの接続を作成しようとしています。New-WebServiceProxyが失敗する

私は、WCFサービスの稼働を得た(とC#のコードから作業)が、次のPowerShellのコードは失敗しました:

PS C:\>$uri = "http://localhost/Person.svc?wsdl" 
PS C:\>$client = New-WebServiceProxy -Uri $uri 

New-WebServiceProxy : Exception has been thrown by the target of an invocation 
At line:1 char:30 
+ $client = New-WebServiceProxy <<<< -Uri $uri 
+ CategoryInfo   : NotSpecified: (:) [New-WebServiceProxy], TargetInvocationException 
+ FullyQualifiedErrorId : System.Reflection.TargetInvocationException,Microsoft.PowerShell.Commands.NewWebServiceProxy 

ここに問題がある可能性がありますか?

編集;関連性があるかどうかはわかりませんが、サービスは資格情報にカスタムSOAPヘッダーを使用します。

+2

Visual Studioを開き、新しいC#プロジェクトを追加して、サービス参照を追加することができますか?サービスを実装するソリューションをロードしていないことを確認してください。問題がPowerShellまたはサービスにあるかどうかを確認しようとしているだけです。 –

+0

ブラウザで「http://localhost/Person.svc?wsdl」を実行すると、動作するように見えますか? –

+1

はい、C#で動作します。だから問題は純粋なPowerShell関連です。 –

答えて

3

ユーティリティをWindows SDKから/validateパラメータで実行してみてください。 /validateのパラメータ使用法の詳細については、ユーティリティの使用法を見てください。ピンチでは、svcutil.exeを使用してコンパイルするプロキシクラスを作成できます。 PowerShell 2.0とNew-WebProxyの前日には、これはhow we created web service proxiesです。

+0

私が所有しているものがWCFサービスのURLである場合、どのように/ validateを使用できますか? –

+0

私はC#プロキシクラスを生成するためにWSDLを使用しましたが、PowerShellがこれをコンパイルして代わりにDLLとして使用する方法はありますか? – PeterX

+0

'Add-Type'コマンドのヘルプを見てください。 C#ソースを(動的アセンブリに対して)コンパイルし、PowerShellから使用することができます。 –

1

また、あなたはどのようなWCFバインディングを使用しているwsdl.exe

+0

こんにちは、このエラーが表示されます。警告:c:\ Users \ frodel \ AppData \ Local \ Temp \ bgd3k_a2.0.cs(100,30):警告CS0108: 'service1.WcfPersonService.Credentials' hide継承されたメンバ 'System.Web.Services.Protocols.WebClientProtocol.Credentials'。隠れが意図されていた場合は、新しいキーワードを使用してください。 –

+0

これは本当にファンキーです:あなたのWebサービスは、Webサービスクライアント実装の方法で取得するCredentialsプロパティを定義しています...それは私が思うに実装している人にとって痛みを引き起こすでしょう。しかし、警告をエラーとして扱っている場合を除き、WARNINGのコンパイルはOKでなければなりません。 – Jaykul

1

に基づいてscript version of New-WebServiceProxyを、試みることができますか?

デフォルトでは、wsHttpBindingを使用するWCFプロジェクトは、クライアントがpowershellのnew-webserviceproxyコマンドレットで作成されたプロキシよりも多くのWS- *機能をサポートすることを前提としています。

basicHttpBindingを使用するエンドポイントバインディングを変更し、HTTP GETがメタデータに対してサポートされていることを確認します。例:

<system.serviceModel> 
    <services> 
     <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior"> 
      <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1"> 
      </endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="WcfService1.Service1Behavior"> 
       <serviceMetadata httpGetEnabled="true"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 
+0

私はそれを有効にしました - まだ運がありません。 – PeterX