繁体   English   中英

wcf PerSession(Wshttpbinding)与可移植类库(PCL)

[英]wcf PerSession (Wshttpbinding) with Portable Class Library (PCL)

似乎可移植类库不支持为此所需的PerSession(Wshttpbinding)。

有什么解决办法吗?

我有xamarin表单应用程序(服务器客户端),用户可以连接到自己的数据库并获取或更新数据。 一旦用户提供了用户名和密码,则必须将某些信息存储到其会话中,例如数据库连接字符串,并且当用户发出数据请求时,存储在其会话中的适当的连接字符串将用于该数据库并将数据发送回去。

否则,在没有权限的情况下,我必须从客户端传递每个函数的连接字符串。

我如何避免这种情况? 可移植类库不支持wshttpbinding,因此我不能使用PerSession

有什么帮助吗?

头痛太多

对于使用以下组合的任何人来说,障碍都太多了

  • Xamarin形式
  • PCL(便携式类库)
  • 世界足球联合会
  • IClientMessageInspector

问题:

我需要有一个多客户端应用程序,每个应用程序都可以连接到自己的数据库(所有模式相同)

为此,我希望在会话级别上存储一些信息,例如(Connection String,User Information),因此当调用一种方法来知道从哪个数据库进行检索时,我将检索数据。

问题1 (花了我5天的时间来理解和意识到)

  • Sessions无法与PCL( WCF PerSession )一起使用,为什么? 因为PerSession需要WsHttpBinding但是PCL不支持WsHttpBinding仅BasicHttp

问题2 (让我花了3天的时间来了解为什么不起作用)

  • 然后我在这里到那里看到很多关于实现IClientMessageInspector的帖子请参见在线示例,如何轻松实现IClientMessageInspector ),因此每次客户端请求一个向服务器发送一些额外信息以及该实例的信息时,我的请求就是connectionString。 在这里我得到一个例外

    NotImplementedException。 为什么? 由于MONO中存在此错误https://bugzilla.xamarin.com/show_bug.cgi?id=40064

简单来说

在PCL(目标为.NET Core)中创建WCF客户端时,必须使用EndpointBehaviors而不是Behaviors。 这在Windows RT应用程序中可以正常工作,但是Mono没有实现此功能,因此在Android和iOS中产生NotImplementedException。

答案在上面的链接上,来自其他人的另一个答复,我对此表示感谢。

简单来说

代替

    MyService.Endpoint.EndpointBehaviors(New MyBehavior)

采用

    Dim prop = MyService.Endpoint.GetType.GetTypeInfo.GetDeclaredProperty("Behaviors")
    Dim obj = CType(prop.GetValue(MyService.Endpoint), KeyedCollection(Of Type, IEndpointBehavior))
    obj.Add(New Behavior)

而不是

clientRuntime.ClientMessageInspectors.Add(New MyInspector)

采用

Public Sub ApplyClientBehavior(endpoint As ServiceEndpoint, clientRuntime As ClientRuntime) Implements IEndpointBehavior.ApplyClientBehavior
    Dim prop = clientRuntime.GetType.GetTypeInfo.GetDeclaredProperty("MessageInspectors")
    Dim obj = CType(prop.GetValue(clientRuntime), ICollection(Of IClientMessageInspector))
    obj.Add(New MyInspector)
End Sub

无需更改配置文件

希望有一天有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM