9

Mvc3TestSvcRef と Mvc4TestSvcRef の 2 つのプロジェクトがあります。Mvc3TestSvcRef は、イントラネット アプリケーション用の ASP.NET MVC 3 テンプレートからのものです。Mvc4TestSvcRef は、イントラネット アプリケーション用の ASP.NET MVC 4 テンプレートからのものです。

サービス参照を追加しようとしています。Mvc3TestSvcRef で、プロジェクト (または参照フォルダー) を右クリックし、[サービス参照の追加] を選択します。URL をポイントし、[Go] をクリックします。参照が解決されたら、名前空間を入力して [OK] をクリックします。予想どおり、セクションが構成に追加され、バインディングとクライアント タグが完成しました。インポートできます:「using Mvc3TestSvcRef.MySvcRef;」そして、次のようなコードを書きます。

        using (var cl = new MyServiceClient())
        {
            cl.DoStuff();
        }

Mvc4TestSvcRef で同じ手順に従いますが、config に system.servicemodel が追加されていません。さらに、インポート: "using Mvc4TestSvcRef.MySvcRef;" 解決できません。Visual Studio 2010 と Visual Studio 2012 の両方の MVC 4 でこれを試しました。

ASP.NET MVC 4 プロジェクト タイプにサービス参照を追加するプロセスに大きな変更がありましたか、それとも何か不足しているか、インストールが破損していますか?

4

2 に答える 2

16

Reference.cs にはコードはなく、コメントだけです。

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17929
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

作業しているプロジェクトから reference.cs をコピーして名前空間を変更し、作業中のプロジェクトのセクションを MVC 4 プロジェクトに追加しましたが、まだ問題がありました。

ビルドしようとしましたが、いくつかの警告とエラーが発生しました。サービス参照 'MySvcRef' のコードを生成できませんでした。詳細については、その他のエラーおよび警告メッセージを確認してください。

それが私をこの記事に導きました:サービス参照エラー: サービス参照のコードを生成できませんでした

そのため、[詳細設定] セクションで、参照されているすべてのアセンブリで型の再利用のチェックを外しました。

これにより、優れたサービス リファレンスが生成されたようです。ただし、たとえば System.TimeSpan のように、DataContracts の 1 つで DataMember として使用される System に何かがある場合、参照は、その元からではなく、参照名前空間に TimeSpan を持つようになります。そのため、クライアントはすべての System.Timespan プロパティを ReferenceNameSpace.Timespan として認識し、比較などが失敗する可能性があります。ここでのより良い答えは、以下のコメントで指摘されているように、参照から特定のアセンブリを含め、System.Web.Http のチェックボックスをオンにしないことです。

于 2012-08-21T14:38:10.560 に答える
8

手遅れかどうかはわかりませんが、「参照を追加するときは、詳細設定で再利用タイプのチェックボックスを削除してください」という解決策があります。

于 2013-05-28T16:42:17.373 に答える