解决.Net Remoting无法传Stream类型参数的问题
2009-06-18 11:32
661 查看
利用.Net Remoting传Stream类型参数时,一般会报下面两个错误。
1.如果是用TcpServerChannel(string name, int port);或是TcpServerChannel(int port);注册通道的话,会报下面这个错误:System.Runtime.Serialization.SerializationException: Because of security restrictions, the type System.Runtime.Remoting.ObjRef cannot be accessed. ---> System.Security.SecurityException: Request failed.
2.如果是用TcpServerChannel(IDictionary properties, IServerChannelSinkProvider sinkProvider);或是
TcpServerChannel(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback);或是
TcpServerChannel(string name, int port, IServerChannelSinkProvider sinkProvider);注册通道的话,会报下面这个错误:System.Runtime.Remoting.RemotingException was unhandled by user code
Message="This remoting proxy has no channel sink which means either the server has no registered server channels that are listening, or this application has no suitable client channel to talk to the server."
经过这两天的研究,暂时没有找到传Stream的解决方案。目前可以使用如下替代方法解决这个问题:
客户端使用序列化的byte[]类型替代Stream来作为参数与服务器进行通信。代码如下:
客户端:
服务端:
把Stream先转化为byte[]传送,服务端再把byte[]转化为Stream。
但是令我不解的是,如果服务端把Stream作为.Net Remoting的返回值,就不报错,而且结果也成功。如果有知道原因的朋友,请给我留言,谢谢。
1.如果是用TcpServerChannel(string name, int port);或是TcpServerChannel(int port);注册通道的话,会报下面这个错误:System.Runtime.Serialization.SerializationException: Because of security restrictions, the type System.Runtime.Remoting.ObjRef cannot be accessed. ---> System.Security.SecurityException: Request failed.
2.如果是用TcpServerChannel(IDictionary properties, IServerChannelSinkProvider sinkProvider);或是
TcpServerChannel(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback);或是
TcpServerChannel(string name, int port, IServerChannelSinkProvider sinkProvider);注册通道的话,会报下面这个错误:System.Runtime.Remoting.RemotingException was unhandled by user code
Message="This remoting proxy has no channel sink which means either the server has no registered server channels that are listening, or this application has no suitable client channel to talk to the server."
经过这两天的研究,暂时没有找到传Stream的解决方案。目前可以使用如下替代方法解决这个问题:
客户端使用序列化的byte[]类型替代Stream来作为参数与服务器进行通信。代码如下:
客户端:
public static void WriteFileToDBByStream(Stream stream) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); IFormatter formatter = new BinaryFormatter(); MemoryStream memoryStream = new MemoryStream(); formatter.Serialize(memoryStream, buffer); remotingInterfaceInstace.WriteFileToDBByStream(memoryStream.ToArray()); }
服务端:
public void WriteFileToDBByStream(byte[] streamBytes) { IFormatter format = new BinaryFormatter(); MemoryStream memoryStream = new MemoryStream(streamBytes); byte[] data = format.Deserialize(memoryStream) as byte[]; memoryStream = new MemoryStream(data); //使用Stream UserDefinedFunction(memoryStream); }
把Stream先转化为byte[]传送,服务端再把byte[]转化为Stream。
但是令我不解的是,如果服务端把Stream作为.Net Remoting的返回值,就不报错,而且结果也成功。如果有知道原因的朋友,请给我留言,谢谢。
相关文章推荐
- 如何解决Remoting无法传输存储过程参数的问题
- 如何解决Remoting无法传输存储过程参数的问题
- 如何解决Remoting无法传输存储过程参数的问题
- 解决“PowerPoint 无法加载类型库msppt.olb”问题
- vector中sort排序(解决char类型数据无法排序的问题)
- 基于Converter解决Struts无法处理日期类型的问题
- .net 2.0 中对于非服务器端的input元素 type为file后台无法获取的问题的解决方法
- 一行代码解决百度分享无法动态传递参数问题
- .Net下使用System.Data.OracleClient出现“ORA-12154问题“TNS: 无法处理服务名”问题的解决
- .Net中引用类型按值参数引用的问题
- 解决"System.AccessViolationException”类型的未经处理的异常在 未知模块(IIS Worker Process 已停止工作)导致无法连接远程数据库的问题
- AE开发中关于 “无法嵌入互操作类型.........请改用适用的接口”问题的解决方法
- VB.NET关闭窗体时最小化(附带解决.NET程序导致XP无法关机重启的问题)
- MyBatis 参数类型为String时常见问题解决方法
- .NET中回发或回调参数无效问题的解决
- springmvc 4.3,RequestParamMethodArgumentResolver无法正常解析String参数问题解决
- 在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。
- Dynamics CRM 依赖组件类型为应用程序功能区导致的无法删除实体问题的解决方法
- 解决在LinqDataSouce中使用GUID参数类型的问题
- .NET中回发或回调参数无效问题的解决