LoginSignup
6
7

More than 1 year has passed since last update.

C#でWebサービス(SOAP)を開発してIISへ公開する

Last updated at Posted at 2022-09-21

1. はじめに

  • Java/Axsis2で実装していたレガシーシステムから、C#にSOAP通信サービスを移行したい
  • IISへSOAP通信サービスを公開して、Soap UIを使用してクライアント側の稼働確認をしたい
  • 開発効率を考えて.NET Frameworkに含まれているASP.NETのasmxを使用する
  • .NETX系ではSOAP通信のツールは含まれていないため

2. 開発環境

  • Visual Studio 2022
  • .NET Framework 4.8
  • IIS 8
  • Soap UI 5.7

3. ASP.NETプロジェクトの作成

3.1. Visual Studioで新規プロジェクトを作成する

  • 「ASP.NET Webアプリケーション (.NET Framework)」 を選択する

  • ASP.NETサービスがインストールされていない場合は別途Visual Struio インストーラーからインストールする
    image.png

  • フレームワークは 「.NET Framework 4.8」 を選択する
    image.png

3.2. ASMXファイルを追加する

  • 新しい項目を追加で、「Webサービス(ASMX)」 を追加する
    image.png

  • サンプルで 「HelloWorld」 サービスが記述されている
    image.png

3.3. サンプルのサービスを起動する

  • 実行ボタンをクリックすると、Webブラウザが立ち上がる
    image.png

  • 画面上部の「HelloWorld」のリンクをクリックすると、SOAPの呼び出し方が記載されれている
    image.pngimage.png

  • 画面上部の「起動ボタン」をクリックすると、SOAPの呼び出し結果が表示される
    image.png

4. SOAP通信サービスのパラメータ修正

  • SOPAでパラメータを送受信できるSearchサービスを追加する
WebService1.asmx.cs (抜粋)
        [WebMethod]
        public ParameterDto Search(ParameterDto inParameter)
        {
            var outParameter = new ParameterDto
            {
                id = inParameter.id,
                outputDto = new OutputDto
                {
                    output1 = inParameter.outputDto.output1,
                    output2 = inParameter.outputDto.output2
                }
            };
            return outParameter;
        }

  • パラメータのカスタムDTOクラスを追加する
ParameterDto.cs
namespace WebApplication1
{
    public sealed class ParameterDto
    {
        public int id { get; set; }
        public OutputDto outputDto { get; set; }
    }
}
  • パラメータ内のネストしたカスタムDTOクラスを追加する
OutputDto.cs
namespace WebApplication1
{
    public sealed class OutputDto
    {
        public string output1 { get; set; }
        public string output2 { get; set; }
    }
}

5. Soap UIでの動作確認

5.1. Soap UI をダウンロードする

5.2. Soap UI をインストールする

  • ダウンロードしたセットアップファイルを実行する

5.3. New SOAP Project を作成する

  • 「 File 」> 「 New SOAP Project 」 をクリックする
    image.png

  • 「 Project Name (任意) 」、「Initial WSDL 」を入力して、OKボタンをクリックする
    image.png

WSDLは 「https://localhost:44308/ [ASMXファイル名] ?WSDL」を指定する

  • SOAP呼び出しのリクエストが作成される
    image.png

5.4. SOAP Projectを実行する

  • SOAP Project のRequest値を入力する
    image.png

  • 画面左上の実行アイコンをクリックすると、画面右側のResponseが返却される
    image.png

5.5. 実行時エラーが発生したら

  • 下記エラーが出る場合は、ProxyをON/OFFすることで解決できる可能性があります。
    org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: The entity "copy" was referenced, but not declared
    image.pngimage.png

6. IISサーバへサービスを公開する

6.1. ASMXファイルを修正する

  • Namespaceを確定しているURLに変更する
    image.png

6.2. サービスを公開する(ローカル側)

  • クラスビューからサービスを右クリックして、「 発行 」をクリックする
    image.png

  • 今回はフォルダーを選択して、ローカルでファイルを作成した後に手動でサーバーへアップする方法をとる
    image.png

  • 任意の出力先を指定する
    image.png

  • 「 発行 」 ボタンをクリックする
    image.png

  • ローカルに公開サービスが出力される
    image.png

6.3. サービスを公開する(サーバ側)

  • IISに必要なプラットフォームをインストールする (任意)
    image.png

  • IISサーバへローカルのパッケージファイルをコピーすることで公開できた

7. ソースコード

8. 参考文献

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7