2009-11-17 8 views
7

私は.NET 3.5アプリケーションを作成しており、WCFサービスとクライアントの両方を制御しています。svcutil.exeを使用していくつかのWCFサービスのプロキシクラスを作成する際のエラー/警告

私はサービスのプロキシクラスを生成するためにsvcutilを使用しています。データ型を共有しているので、いくつかのサービスを組み合わせています。

svcutil /out:ServiceReference.cs /noconfig /namespace:*,Global.ServiceReference 
/tcv:Version35 http://localhost:12345/first.svc http://localhost:12345/second.svc 

さらに深刻な問題は、エラーである - 私は 『Global.ServiceReference.MyClass.MyField』の間の「あいまいと「Global.ServiceReference.MyClass.MyFieldの多くを、その結果、二回作成されたクラスを持っていますエラー。現在、このクラスは1つのサービスでのみ参照されていますが、今後はより多くのサービスから参照されます。

のような2つの生成されたクラスの外観:それらに適用される属性に基づいて

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] 
[System.Runtime.Serialization.DataContractAttribute(Name="MyClass", Namespace="http://schemas.datacontract.org/2004/07/MyService.Util")] 
public partial class MyClass : object, System.Runtime.Serialization.IExtensibleDataObject 
{ 
    //fields 
} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "3.0.4506.2152")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.datacontract.org/2004/07/MyService.Util")] 
public partial class MyClass 
{ 
    // same fields 
} 

、これは、XmlSerializerを対DataContractSerializerとは何かを持っているが、私ドンそれらが何を意味するのか本当に分かりません。

第二の問題は、svcutilは、フォームの警告の最大積載量を与えているということです。

Error: There was a validation error on a schema generated during export: 
    Source: 
    Line: 1 Column: 10415 
    Validation Error: The simpleType 'http://schemas.microsoft.com/2003/10/Serialization/:guid' has already been declared. 

これらのエラーでも2つの非常にシンプルなサービスで起こります。サービス#1は

[OperationContract] 
public string test(int test) 
{ 
    return "test"; 
} 

を持っており、サービス#2は

[OperationContract] 
public int Ping(string test) 
{ 
    return 23; 
} 

を持っている場合たとえば、...私は警告を取得します。 100人のように、さまざまなglobalElements、globalAttributes、またはguid、duration、charなどのsimpleTypesについて不平を言っています。

サービスのいずれかをvoid /戻り値の型に変更すると、警告を得る。これは最も簡単なテストなので、これは本当に混乱しています。カスタムタイプをまったく使用しないと、svcutilはバーフィングしています。ここで何が起こっているか考えてみましょうか?

答えて

1

タイプを共有し、このメソッドを1年以上使用している複数のサービスをリストすると、警告が正常に表示されます。ユーティリティがクラスを生成しているか、それとも何も作成していません。

+0

それはクラスを作成していますうん。私は警告が私を傷つけていることに気づいていないので、本当に問題がなければ無視するのは嬉しいです。 私の疑問の最初の部分から重複したクラス定義がありますが、今は私を間違いなく殺しています。 – Clyde

+2

私はsvcutil.exeを使って同じことをすると、エラーが出ます - 出力ファイルが生成されているという意味では実際には警告ですが、画面上のメッセージには "エラー:....!"超confusing! – azheglov

3

XSDファイルに何かがあると、svcutilがXmlSerializerを呼び出していくつかの型を生成しています。残念ながら、DataContractとXmlSerializerの間の型共有は利用できないため、重複した型になります。あなたはおそらく、サーバー上で独占的にDCを使用しているように見えるので、そうのように、単にDCモードに滞在するsvcutilを強制的にXmlSerializerに倒れないように十分かもしれません:

svcutil /serializer:DataContractSerializer ... 
+0

ありがとうアレックス!これは実際に私のために働いた。 –

関連する問題