4

Visual Studio 2010を使用すると、いくつかのWebサイト(Webアプリケーションプロジェクトではない)とコマンドラインおよびwinformsプロジェクトを使用したソリューションが得られます。すべてのターゲット.Net2.0。プロジェクトの多くには、WebサイトのASMXWebサービスへのWeb参照があります。

Webサービスは頻繁に変更されるため、すべてをコンパイルするときは、すべてのプロジェクトを手動で調べて、Webサービスの参照を更新する必要があります。これで、 disco.exewsdl.exeを使用してこれを自動化することに成功しました。しかし、wsdl.exeによって生成されたコードの違いと、VSでのWeb参照の手動更新について心配しています。

wsdl.exeは、次のようなコードを生成します。

public WebServiceName() {
    string urlSetting = System.Configuration.ConfigurationManager.AppSettings["WebServiceName"];
    if ((urlSetting != null)) {
        this.Url = urlSetting;
    }
    else {
        this.Url = "http://example/webservicename.asmx";
    }
}

VSは次のようなコードを生成しますが:

private bool useDefaultCredentialsSetExplicitly;

public WebServiceName() {
    this.Url = global::ProjectName.Properties.Settings.Default.ProjectName_WebServiceNameWebService_WebServiceName;
    if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
        this.UseDefaultCredentials = true;
        this.useDefaultCredentialsSetExplicitly = false;
    }
    else {
        this.useDefaultCredentialsSetExplicitly = true;
    }
}

public new string Url {
    get {
        return base.Url;
    }
    set {
        if ((((this.IsLocalFileSystemWebService(base.Url) == true) 
                    && (this.useDefaultCredentialsSetExplicitly == false)) 
                    && (this.IsLocalFileSystemWebService(value) == false))) {
            base.UseDefaultCredentials = false;
        }
        base.Url = value;
    }
}

public new bool UseDefaultCredentials {
    get {
        return base.UseDefaultCredentials;
    }
    set {
        base.UseDefaultCredentials = value;
        this.useDefaultCredentialsSetExplicitly = true;
    }
}

private bool IsLocalFileSystemWebService(string url) {
    if (((url == null) 
                || (url == string.Empty))) {
        return false;
    }
    System.Uri wsUri = new System.Uri(url);
    if (((wsUri.Port >= 1024) 
                && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
        return true;
    }
    return false;
}

他のすべては基本的に同じです。これについて心配する必要がありますか?これは確かに、オーバーライドURLがapp.configファイルとweb.configファイルに保存される方法を変更する必要があることを意味します。wsdl.exeはappSettingsを使用し、VSはconfigSections/applicationSettingsを使用します。

PS:ASMXは古く、WCFは新しいことを知っています。私はこれで立ち往生しています。

更新:違いについて説明しているこの記事を見つけました:

複数のWebアプリケーションプロジェクト間で動的URLを共有する方法

http://weblogs.asp.net/bradleyb/archive/2006/05/04/445133.aspx

4

1 に答える 1

4

誰も応答していないので (そう、Tumbleweed!)、少なくとも私が見つけたものを投稿します。VS コードがどのように生成されるかを実際に確認したい場合は、Microsoft.VSDesigner.dll 内にあります。私のマシンには 8.0 と 9.0 のバージョンがあります。これがパスです。これがあなたのシステムにあるものと一致するかどうかはわかりません:

C:\Windows\assembly\GAC_MSIL\Microsoft.VSDesigner\8.0.0.0__b03f5f7f11d50a3a\Microsoft.VSDesigner.dll

Reflectorで開く場合は、 のGenerateCodeメソッドを参照してくださいMicrosoft.VSDesigner.CodeGenerator.DiscoCodeGenerator。これは、ServiceDescriptionImporter.GenerateWebReferencesWsdl.exe が行うように、メソッドを呼び出してベース コードを生成し、コードを変更して VS の結果を取得します。

于 2012-02-10T16:21:12.640 に答える