クライアントからWebサービスを生成するためのwsdlが提供されましたが、wsdl.exeコマンドを使用すると、そこから.csクラスが生成されました。 Webサービスでそのクラスを使用しましたが、クライアントにwsdlを提供したときに、スキーマと一致しませんでした。実際、Webメソッドに入力できるように、.asmxをwsdlから自動的に生成する必要があります。そのため、スキーマと完全に一致します。それが理にかなっていることを願っています。
残念ながら、探しているものに対する魔法の弾丸ソリューションはありません。できることは次のとおりです。
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";
}
}
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" %>
自動生成されたWSDLが、サービスインターフェイスの作成元のWSDLと一致することを保証することはできません。
シナリオでは、WSDLファイルをWebサイトのどこかに配置し、消費者にそのURLを使用させる必要があります。 "?wsdl"がWSDLを返さないように、web.configでDocumentation
プロトコルを無効にする必要があります。見る - <protocols>
要素 。
また、その記事の最初の段落に注意してください。
このトピックは、レガシーテクノロジーに固有のものです。 XML WebサービスおよびXML Webサービスクライアントは、 Windows Communication Foundation(WCF) 。を使用して作成する必要があります。
Thinktecture.comのWSCF(Web Services Contract First)ツールを使用して、WSプロキシクラスを生成できます。したがって、本質的に、WSDLからWebサービスを作成できます。 asmxを作成することはできませんが、それは簡単なことではありませんか?このツールは、VS2005-8(WSCF-blueと呼ばれる2010/WCFの新しいバージョン)に見事に統合されています。私はそれをロードして使用しましたが、常に本当に良いことがわかりました。
これは、回答が非常に遅い場合があります。しかし、困っている人には役立つかもしれません:WSDLをSVCに変換する方法:
ディレクトリ:C:\ Program Files(x86)\ Microsoft Visual Studio 12.0\VC\bin\AMD64に移動します。それぞれの.CSファイルを生成する必要があります。
9.生成されたCSファイルを適切な場所に移動します。
ステップ1
open -> Visual Studio 2017 Developer Command Prompt
ステップ2
WSDL.exe /OUT:myFile.cs WSDLURL /Language:CS /serverInterface
ステップ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.cs(namespaceの内部)に貼り付けます
ステップ5
webサービスクラスでインターフェイスクラスを継承します。例:
public class WebService2 : ICalculoterServiceSoap