単純なWCFロギングサービスがあります。
namespace WCFServiceLibrary
{
[ServiceContract]
public interface ILog
{
[OperationContract]
string InsertLogItem(LogItem logItem);
}
[DataContract]
public class LogItem
{
private string _Text = string.Empty;
[DataMember]
public string Text
{
get { return _Text; }
set { _Text = value; }
}
}
}
そして、私はクライアントとDLLをすべて同じソリューションに持っています。
クライアントからサービスを参照すると、DataContractが表示されます。DLLからサービスを参照すると、DataContractが表示されません。
つまり、サービスをLogServiceとして参照し、このコードをクライアントに持っているということです...
static LogService.LogClient logService = new LogService.LogClient();
//create log item - <<< Compile error in DLL on following line >>>
var itemTolog = new LogService.LogItem { Text = "log this"};
string result = logService.InsertLogItem(itemTolog);
その後は正常に動作しますが、同じコードがDLLにある場合、LogService.LogItemが表示されないためにコンパイルされず、次のエラーが報告されます。
The type or namespace name 'LogItem' does not exist in the namespace 'MyDll.LogService' (are you missing an assembly reference?)
dataContract "LogItem"は、サービスがdllから参照されている場合はオブジェクトエクスプローラーにありませんが、クライアントexeから参照されている場合はあります。
何が得られますか?言うまでもなく、DLLからサービスを参照したいと思います。データコントラクトは、サービスコントラクトのいずれかでアクティブに使用されている場合にのみ表示されることを他の場所で読んだことがありますが、実際はそうです。