我一直在关注各种教程,这些教程解释了如何通过上传文件WCF
,当我尝试MessageContract
在客户端和服务器之间共享包含的类时遇到了一些问题。
基本上我的问题如下:
我RemoteFileInfo
MessageContract
在一个单独的类库中有一个类:
[MessageContract]
public class RemoteFileInfo : IDisposable
{
private System.IO.Stream fileByteStream;
[MessageBodyMember(Order = 1)]
public System.IO.Stream FileByteStream
{
set { this.fileByteStream = value; }
get { return this.fileByteStream; }
}
/*More properties here declared as regular properties or [MessageHeader]*/
}
然后我与服务器和客户端共享该库。这应该意味着客户端不应该实现自己的RemoteFileInfo
类。但是,在我将 .dll 添加到我的客户端项目然后使用Add Service Reference
启用Reuse Types
后,它仍然RemoteFileInfo
会在服务引用的命名空间内重新创建类,这会在它本身与我最初在其中声明它的类库中的类型之间产生歧义。
MessageContract
所以我的问题是,如何在客户端和服务器之间共享一个已声明为 a 的类?我需要这样做,因为我OperationContract
需要一个RemoteFileInfo
对象,并且我想保留我在原始RemoteFileInfo
类中声明的相同属性。
我的OperationContract
:
[OperationContract]
void uploadFile(RemoteFileInfo request);
我希望能够在客户端上准确地调用该方法在服务合同中的声明方式。到目前为止,即使我Generate message headers
在添加服务引用时使用该选项,我最终还是得到了一个uploadFile
具有byte[]
参数而不是流的方法,并且我需要它是一个流。
有任何想法吗?
编辑:我打算发布一个客户端配置,但我需要提到我正在为 Windows 应用商店应用程序开发,所以我没有传统的 app.config。
下面是 WCF 测试客户端为客户端配置生成的内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IRTMobileWebService" sendTimeout="00:05:00" />
</basicHttpBinding>
<netTcpBinding>
<binding name="uploadEndpoint" sendTimeout="00:05:00" transferMode="Streamed">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="http://ipaddress/RTWebServices/RTMobileWebService.svc/basic"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRTMobileWebService"
contract="IRTMobileWebService" name="BasicHttpBinding_IRTMobileWebService" />
<endpoint address="net.tcp://ipaddress/RTWebServices/RTMobileWebService.svc/upload"
binding="netTcpBinding" bindingConfiguration="uploadEndpoint"
contract="IRTMobileImageService" name="uploadEndpoint">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
我将如何在没有 app.config 的 Windows 商店应用程序中复制它?