Tag: 远程处理

.NET远程处理exception:权限被拒绝:无法远程调用非公共或静态方法

我正在编写一个程序,它允许加载特定的托管.DLL文件并使用它。 由于我希望能够卸载.DLL文件,我正在创建两个AppDomain – 一个用于应用程序本身,另一个用于当前加载的.DLL。 由于加载的.DLL中的大多数对象都没有很好地序列化,我正在创建一个MarshalByRefObject包装类,它将对象本身保存在自己的AppDomain中,并将一些reflection函数暴露给主应用程序AppDomain。 但是,当我尝试在远程对象上调用方法时,我遇到了exception: 权限被拒绝:无法远程调用非公共或静态方法。 这很奇怪,因为我根本没有使用任何非公共或静态方法。 从本质上讲,我所拥有的是: class RemoteObjectWrapper: MarshalByRefObject { private Type SourceType; private object Source; public RemoteObjectWrapper(object source) { if (source == null) throw new ArgumentNullException(“source”); this.Source = source; this.SourceType = source.GetType(); } public T WrapValue(object value) { if ( value == null ) return default(T); var TType = typeof(T); if […]

我可以在Remoting中使用CAO接口吗?

在CAO中没有URI,因此必须在服务器端注册指定的类型。 但是如果我的客户端和服务器通过相同的接口(远程对象实现接口)进行交互,那么如何从客户端调用CAO远程对象。 如果我尝试使用接口类型调用Acitvator.CreateInstance,它会给我exception。 例如 RemoteObject.IRemoteObject obj = (RemoteObject.IRemoteObject )Activator.CreateInstance(typeof(RemoteObject.IRemoteObject), null, url); 上面的代码抛出exception。

如何在.NET远程处理期间使用自定义序列化?

我编写了一个自定义序列化例程,它不使用ISerializable或SerialzableAttribute将我的对象保存到文件中。 我也远程调用这些相同的对象,并希望使用相同的序列化技术。 但是,我不想实现ISerializable,因为我的序列化方法与我的对象完全分离(我希望它保持这种方式)。 有没有一种简单的方法(可能有远程接收器),我可以在其中获取流并向其写入字节,另一方面从中读取字节,跳过.NET中的序列化框架?

ASP.NET Web App和C#Application之间的双向通信

我需要构建一个双向通信的网站和应用程序。 我将使用ASP.NET构建网站,并使用C#构建应用程序。 我将自己托管该网站,它将与应用程序在同一台机器上运行。 我不知道在两者之间发送数据的最佳技术是什么。 C#应用程序需要一直运行。 我应该构建一个C#控制台应用程序,然后隐藏控制台窗口吗? 或者其他类型的应用程序会更合适吗? 我一直在寻找网络,并找到了几个不同的建议,包括套接字,消息队列,远程处理和WCF。 一些指示将非常感激 – 我是所有这一切的新手。 谢谢。 编辑将使用请求 – 响应模式,Web App始终是实例化请求的模式。 这就是我所说的双向沟通​​。 Web应用程序将向后端应用程序发送请求,后端应用程序将执行一些处理,然后将响应发送回Web应用程序。 JSON将用于来回发送数据。 我将使用SQL Server Express 2008 R2,后端应用程序将是唯一与数据库通信的应用程序。 Web应用程序主要关注表示层。 后端应用程序将具有内存中的对象,这些对象在应用程序启动时实例化(数据从数据库加载),然后持久保存到数据库(执行期间和关闭之前)。 C#Console应用程序是否适用于此类事情?

PermissionSet – 请求失败错误

我几乎没有使用ChannelSink,ServerSink和ClientSink进行通信的项目。 我已将项目从.NET 2.0升级到.NET 4.0。 升级之前一切正常。 现在,当我尝试进行通信时, – 对于特定的消息 – 我的OnReceiveMessage未被调用并抛出以下exception: System.Security.SecurityException:请求失败 服务器堆栈跟踪:在System.Array.InternalCreate(Void * elementType,Int32 rank,Int32 * pLengths,Int32 * pLowerBounds)System.Array.CreateInstance(类型为elementType,Int32 Length),位于System.Runtime.Serialization.Formatters.Soap.ObjectReader.ParseObject(ParseRecord pr)的System.Runtime.Serialization.Formatters.Soap.ObjectReader.ParseArray(ParseRecord pr)中。处于System.Runtime.Serialization.Forxs.Serial.Sunap.Serialization.Forxs.Soap.SoapParser.ParseXML()的System.Runtime.Serialization.Formatters.Soap.ObjectReader.Parse(ParseRecord pr)System.Runtime.Serialization.Formatters.Soap.SoapHandler.StartChildren()处于System.Runtime.Serialization.Formatters.Soap.SoapParser.ParseXML() System.Runtime.Serialization.Formatters.Soap.ObjectReader.Run()System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler,ISerParser) serParser)System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(Stream serializationStream, System.Runtime.Remoting.Channels.CoreChannel.DeserializeSoapRequestMessage(流中的HeaderHandler处理程序) system.Runtime.Remoting.Chanels.SoapServerFormatterSink.ProcessMessage中的inputStream,Header [] h,Boolean bStrictBinding) (IServerChannelSinkStack sinkStack,IMessage requestMsg,ITransportHeaders requestHeaders,Stream requestStream,IMessage&responseMsg,ITransportHeaders&responseHeaders,Stream&responseStream) 在[0]处重新抛出exception:在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage) RetMSg)在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)。 。 (我的一些文件)。 失败的操作是:Demand失败的第一个权限的类型是:System.Security.PermissionSet需求是: 唯一允许的权限是: 导致该失败的方法是:System.Runtime.Remoting.Channels.ServerProcessing ProcessMessage(System.Runtime.Remoting.Channels.IServerChannelSinkStack,System.Runtime.Remoting.Messaging.IMessage,System.Runtime.Remoting.Channels.ITransportHeaders,System .IO.Stream,System.Runtime.Remoting.Messaging.IMessage ByRef,System.Runtime.Remoting.Channels.ITransportHeaders ByRef,System.IO.Stream ByRef) 问题是,如果我创建一个虚拟方法并将其添加到sinkstack – 它会调用它。 即使我使用相同的代理拒绝该消息。 其他的事情是,其他消息工作正常。 只有一种类型的消息不能用于创建的所有类型。 […]

.NET Remotingexception未处理客户端

我检查了其余的远程问题,这个具体案例似乎没有得到解决。 我有一个.NET Remoting服务器/客户端设置。 在服务器端,我有一个对象,它有一个可以抛出exception的方法,以及一个尝试调用该方法的客户端。 服务器: public bool MyEquals(Guid myGuid, string a, string b) { if (CheckAuthentication(myGuid)) { logger.Debug(“Request for \”” + a + “\”.Equals(\”” + b + “\”)”); return a.Equals(b); } else { throw new AuthenticationException(UserRegistryService.USER_NOT_REGISTERED_EXCEPTION_TEXT); } } 客户: try { bool result = RemotedObject.MyEquals(myGuid, “cat”, “dog”); } catch (Services.Exceptions.AuthenticationException e) { Console.WriteLine(“You do not […]

在.NET远程处理RemotingConfiguration.RegisterWellKnownServiceType和RemotingServices.Marshal之间有什么区别?

在.NET远程处理RemotingConfiguration.RegisterWellKnownServiceType和RemotingServices.Marshal之间有什么区别? 我想要做的是在Windows服务中创建一个对象,然后将其作为远程处理对象放入,并让Windows服务和客户端都作用于远程处理对象。 我认为下面的代码可以实现这一点。 FooRemoting foo = new FooRemoting(); RemotingConfiguration.RegisterWellKnownServiceType(typeof(FooRemoting), serverName, WellKnownObjectMode.Singleton); RemotingServices.Marshal(foo);

C#中具有最低内存占用的最快串行器和解串器?

我目前正在使用二进制格式化程序(Remoting)来序列化和反序列化对象以便在我的LAN周围发送。 我最近从2.0升级到.NET 3.5。 3.5有没有引入任何新类型来提高序列化性能? 我已经查看了DataContractSerializer ,但是它将任何内容序列化为基础XML …这必须增加内存占用。 什么是通过LAN发送对象的最快串行器? 我不关心互操作或版本控制…… 我需要速度! 我对第三方开源替代品持开放态度。

在C#中通过远程处理获取外部IP地址

我需要找出运行C#应用程序的计算机的外部 IP。 在应用程序中,我有一个连接(通过.NET远程处理)到服务器。 有没有一种很好的方法来获取服务器端的客户端地址? (我已经编辑了这个问题,更清楚一点。我向所有那些尽力回答这个问题的人道歉,当时我可能有点太模糊了) 解: 我发现了一种对我有用的方法。 通过实现我可以访问CommonTransportKeys.IPAddress的自定义IServerChannelSinkProvider和IServerChannelSink,可以很容易地在CallContext上添加客户端ip。 public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestmessage, ITransportHeaders requestHeaders, System.IO.Stream requestStream, out IMessage responseMessage, out ITransportHeaders responseHeaders, out System.IO.Stream responseStream) { try { // Get the IP address and add it to the call context. IPAddress ipAddr = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress]; CallContext.SetData(“ClientIP”, ipAddr); } catch (Exception) { } sinkStack.Push(this, null); […]