web-dev-qa-db-ja.com

wsdlからWebサービスを生成する方法

クライアントからWebサービスを生成するためのwsdlが提供されましたが、wsdl.exeコマンドを使用すると、そこから.csクラスが生成されました。 Webサービスでそのクラスを使用しましたが、クライアントにwsdlを提供したときに、スキーマと一致しませんでした。実際、Webメソッドに入力できるように、.asmxをwsdlから自動的に生成する必要があります。そのため、スキーマと完全に一致します。それが理にかなっていることを願っています。

39
alice7

残念ながら、探しているものに対する魔法の弾丸ソリューションはありません。できることは次のとおりです。

  • visual Studioコマンドプロンプトウィンドウで次のコマンドを使用して、インターフェイスクラスを作成します。

    wsdl.exe yourFile.wsdl /l:CS /serverInterface
    使用する言語にVBまたはCSを使用します。これにより、新しい.csまたは.vbファイル。

  • 新しい.NET Webサービスプロジェクトを作成します。既存のファイルをプロジェクトにインポートします-上記の手順で作成されたファイル。

  • あなたの.asmx.csファイルをCode-Viewで、クラスを次のように変更します。

 public class MyWebService : System.Web.Services.WebService, IMyWsdlInterface
 {    
     [WebMethod]
     public string GetSomeString()
     {
         //you'll have to write your own business logic 
         return "Hello SOAP World";
     }
 }
68
p.campbell

wsdl /serverまたはwsdl /serverinterfaceスイッチの使用はどうですか?私がwsdl.exeコマンドラインプロパティを理解している限り、それはあなたが探しているものです。

- ADVANCED -

/ server

Server switch has been deprecated. Please use /serverInterface instead.
Generate an abstract class for an xml web service implementation using
ASP.NET based on the contracts. The default is to generate client proxy
classes.

一方、時代遅れの技術ソリューションを作成したいのはなぜですか?このWebサービスをWCFサービスとして作成してみませんか。これが、現在の、より現代的で、はるかに柔軟な方法です!

マーク


更新:

WSDLファイルでwsdl /serverを使用すると、次のファイルが作成されます。

[WebService(Namespace="http://.......")]
public abstract partial class OneCrmServiceType : System.Web.Services.WebService 
{
    /// <remarks/>
    [WebMethod]
    public abstract void OrderCreated(......);
}

これは基本的に、ソリューションにASMXファイルを追加したときに生成されるコードとほぼ同じです(コードビハインドファイル-「yourservice.asmx.cs」)。 WSDLファイルからASMXファイルを作成することに近づくことはできないと思います。

「yourservice.asmx」はいつでも手動で追加できます-実際にはあまり含まれていません:

<%@ WebService Language="C#" CodeBehind="YourService.asmx.cs" 
      Class="YourServiceNamespace.YourServiceClass" %>
4
marc_s

自動生成されたWSDLが、サービスインターフェイスの作成元のWSDLと一致することを保証することはできません。

シナリオでは、WSDLファイルをWebサイトのどこかに配置し、消費者にそのURLを使用させる必要があります。 "?wsdl"がWSDLを返さないように、web.configでDocumentationプロトコルを無効にする必要があります。見る - <protocols>要素

また、その記事の最初の段落に注意してください。

このトピックは、レガシーテクノロジーに固有のものです。 XML WebサービスおよびXML Webサービスクライアントは、 Windows Communication Foundation(WCF)を使用して作成する必要があります。

3
John Saunders

Thinktecture.comのWSCF(Web Services Contract First)ツールを使用して、WSプロキシクラスを生成できます。したがって、本質的に、WSDLからWebサービスを作成できます。 asmxを作成することはできませんが、それは簡単なことではありませんか?このツールは、VS2005-8(WSCF-blueと呼ばれる2010/WCFの新しいバージョン)に見事に統合されています。私はそれをロードして使用しましたが、常に本当に良いことがわかりました。

1
Neilb

これは、回答が非常に遅い場合があります。しかし、困っている人には役立つかもしれません:WSDLをSVCに変換する方法:

  1. さらに簡単にアクセスできるように、「E:\」の場所に.wsdlファイルがあるとします。
  2. 各.wsdlファイルのコマンドを次のように準備します。E:\ YourServiceFileName.wsdl
  3. 権限:権限を実行する管理者権限を持っていると仮定します。ディレクトリを開く:C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\VC\bin
  4. AMD64を右クリック=>セキュリティ=>編集=>ユーザーの追加=>全員または現在のユーザー=>すべての許可を許可=> OK。
  5. テキストエディターで各ファイルのコマンドを次のように準備します:wsdl.exe E:\ YourServiceFileName.wsdl/l:CS/server。
  6. 次に、C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\VS2013 x64 Native ToolsコマンドプロンプトからVisual Studioコマンドプロンプトを開きます。
  7. 上記のコマンドを実行します。
  8. ディレクトリ:C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\VC\bin\AMD64に移動します。それぞれの.CSファイルを生成する必要があります。

    9.生成されたCSファイルを適切な場所に移動します。

1
Red Swan

ステップ1

open -> Visual Studio 2017 Developer Command Prompt

ステップ2

WSDL.exe  /OUT:myFile.cs WSDLURL  /Language:CS /serverInterface
  • / serverInterface(wsdlファイルからインターフェイスを作成するため)
  • WSDL.exe(これは.netに付属するwsdlからclasseを作成するために使用します
  • / OUT:(出力ファイル名)

ステップ2

新規作成"Webサービスプロジェクト"

ステップ3

追加-> Webサービス

ステップ4

myFile.cs(上記で生成)からすべてのコードをコピーします-"using classes"を除きます。例:

 /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")]
    [System.Web.Services.WebServiceBindingAttribute(Name="calculoterServiceSoap",Namespace="http://tempuri.org/")]

public interface ICalculoterServiceSoap {

    /// <remarks/>
    [System.Web.Services.WebMethodAttribute()]
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/addition", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    string addition(int firtNo, int secNo);
}

ステップ4

それをあなたのwebService.asmx.csnamespaceの内部)に貼り付けます

ステップ5

webサービスクラスでインターフェイスクラスを継承します。例:

public class WebService2 : ICalculoterServiceSoap
0
abdul rehman kk