2012-01-21 3 views
4

Visual Studio 2010を使用して、いくつかのWebサイト(Webアプリケーションプロジェクトではありません)とコマンドラインとwinformsプロジェクトのソリューションがあります。すべてのターゲット.Net 2.0。多くのプロジェクトでは、WebサイトのASMX WebサービスへのWeb参照があります。WSDL.exeと "Web参照の更新"で生成されるWebサービスプロキシコード - 注意が必要ですか?

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

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

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

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を使用します。

P .:私はASMXが古く、WCFが新しいことを知っています。私はこれに固執しています。

UPDATE:違いについて語っこの記事を見つけた :複数のWebアプリケーションプロジェクト全体

動的URLを共有する方法

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

+0

うわー! 1000人がこの質問を見ました(バッジを持っています!)が、誰もコメントや答えをしたことはありません。私はこれについていくつかの考えを聞いてみたい。私はこれをしたいと夢中でしたか?別の方法を見つけましたか?等。 –

答えて

3

誰が(ええタンブルウィードを!)応答していないので、私は少なくとも私が見つけたものを投稿するでしょう。 VSコードの生成方法を実際に見たい場合は、Microsoft.VSDesigner.dllの内部にあります。私のマシンには8.0と9.0のバージョンがあります。ここにその道があります。これはあなたのシステム上にあるものと一致するかどうかはわからない:

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

あなたはReflectorでそれを開いた場合、Microsoft.VSDesigner.CodeGenerator.DiscoCodeGeneratorGenerateCode方法を見てください。これは、Wsdl.exeのようにServiceDescriptionImporter.GenerateWebReferencesメソッドを呼び出してベースコードを生成し、コードを変更してVS結果を取得します。

更新:ここで私が見つけたすべてのリンクと私のブログの記事です:

http://www.amosfivesix.com/blog/23-net/165-programmatically-updating-web-references-in-net

関連する問題