WCF如何绑定netTcpBinding寄宿到控制台应用程序详解

WCF如何绑定netTcpBinding寄宿到控制台应用程序详解,第1张

契约

新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService

代码如下:

[ServiceContract]

public interface IGameService

{

[OperationContract]

Task<string> DoWork(string arg);

}

public class GameService : IGameService

{

public async Task<string> DoWork(string arg)

{

return await TaskFromResult($"Hello {arg}, I am the GameService");

}

}

[ServiceContract]

public interface IPlayerService

{

[OperationContract]

Task<string> DoWork(string arg);

}

public class PlayerService : IPlayerService

{

public async Task<string> DoWork(string arg)

{

return await TaskFromResult($"Hello {arg}, I am the PlayerService");

}

}

服务端

新建一个控制台应用程序,添加一个类 ServiceHostManager

public interface IServiceHostManager : IDisposable

{

void Start();

void Stop();

}

public class ServiceHostManager<TService> : IServiceHostManager

where TService : class

{

ServiceHost _host;

public ServiceHostManager()

{

_host = new ServiceHost(typeof(TService));

_hostOpened += (s, a) => {

ConsoleWriteLine("WCF监听已启动!{0}", _hostDescriptionEndpoints[0]Address);

};

_hostClosed += (s, a) =>

{

ConsoleWriteLine("WCF服务已终止!{0}", _hostDescriptionEndpoints[0]Name);

};

}

public void Start()

{

ConsoleWriteLine("正在开启WCF服务{0}", _hostDescriptionEndpoints[0]Name);

_hostOpen();

}

public void Stop()

{

if (_host != null && _hostState == CommunicationStateOpened)

{

ConsoleWriteLine("正在关闭WCF服务{0}", _hostDescriptionEndpoints[0]Name);

_hostClose();

}

}

public void Dispose()

{

Stop();

}

public static Task StartNew(CancellationTokenSource cancelTokenSource)

{

var theTask = TaskFactoryStartNew(() =>

{

IServiceHostManager shs = null;

try

{

shs = new ServiceHostManager<TService>();

shsStart();

while (true)

{

if (cancelTokenSourceIsCancellationRequested && shs != null)

{

shsStop();

break;

}

}

}

catch (Exception ex)

{

ConsoleWriteLine(ex);

if (shs != null)

shsStop();

}

}, cancelTokenSourceToken);

return theTask;

}

}

在Main方法中启动WCF主机

class Program

{

static Program()

{

ConsoleWriteLine("初始化");

ConsoleWriteLine("服务运行期间,请不要关闭窗口。");

ConsoleWriteLine();

}

static void Main(string[] args)

{

ConsoleTitle = "WCF主机 x64(按 [Esc] 键停止服务)";

var cancelTokenSource = new CancellationTokenSource();

ServiceHostManager<WcfContractServicesGameService>StartNew(cancelTokenSource);

ServiceHostManager<WcfContractServicesPlayerService>StartNew(cancelTokenSource);

while (true)

{

if (ConsoleReadKey()Key == ConsoleKeyEscape)

{

ConsoleWriteLine();

cancelTokenSourceCancel();

break;

}

}

ConsoleReadLine();

}

}

服务端配置

在控制台应用程序的Appconfig中配置systemserviceModel

<systemserviceModel>

<services>

<service name="WetteryWcfContractServicesGameService" behaviorConfiguration="gameMetadataBehavior">

<endpoint address="nettcp://localhost:19998/Wettery/GameService" binding="netTcpBinding" contract="WetteryWcfContractServicesIGameService" bindingConfiguration="netTcpBindingConfig">

<identity>

<dns value="localhost" />

</identity>

</endpoint>

</service>

<service name="WetteryWcfContractServicesPlayerService" behaviorConfiguration="playerMetadataBehavior">

<endpoint address="nettcp://localhost:19998/Wettery/PlayerService" binding="netTcpBinding" contract="WetteryWcfContractServicesIPlayerService" bindingConfiguration="netTcpBindingConfig">

<identity>

<dns value="localhost" />

</identity>

</endpoint>

</service>

</services>

<bindings>

<netTcpBinding>

<binding name="netTcpBindingConfig" closeTimeout="00:30:00" openTimeout="00:30:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="100" maxReceivedMessageSize="2147483647">

<readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647 " maxBytesPerRead="4096" maxNameTableCharCount="16384" />

<reliableSession ordered="true" inactivityTimeout="00:30:00" enabled="false" />

<security mode="Transport">

<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />

</security>

</binding>

</netTcpBinding>

</bindings>

<behaviors>

<serviceBehaviors>

<behavior name="gameMetadataBehavior">

<serviceMetadata httpGetEnabled="True" httpGetUrl="http://localhost:8081/Wettery/GameService/MetaData" />

<serviceDebug includeExceptionDetailInFaults="True" />

<serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000" />

</behavior>

<behavior name="playerMetadataBehavior">

<serviceMetadata httpGetEnabled="True" httpGetUrl="http://localhost:8081/Wettery/PlayerService/MetaData" />

<serviceDebug includeExceptionDetailInFaults="True" />

<serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000" />

</behavior>

</serviceBehaviors>

</behaviors>

</systemserviceModel>

未避免元数据泄露,部署时将HttpGetEnable设为False

运行控制台应用程序

按[ESC]键终止服务

客户端测试

服务端运行后,用wcftestclient工具测试,服务地址即behavior中配置的元数据GET地址

http://localhost:8081/Wettery/GameService/MetaData

http://localhost:8081/Wettery/PlayerService/MetaData

总结

若手机无法安装三星应用商店,请操作:

1通过手机登陆三星官网

向上滑动屏幕,点击下载三星应用商店按钮,并按照提示进行安装即可(若未出现“下载三星应用商店”,请等待几秒待网页加载完毕)。

2若无法安装该软件,请检查手机上网是否正常。

3换个时间段尝试。

最近一段时间,三星手机内置的 游戏 优化服务(Game Optimizing Service,简称“GOS”)引发了强烈的质疑,据称这项服务会主动限制某些 游戏 的性能,以达到防止手机过热的目的。

三星的这个想法和出发点非常好,推出这项措施在客观上也非常有必要,但是问题是经过大量用户的实际验证,发现其GOS服务进行性能限制的对象不止针对 游戏 类应用。

还有大量其它普通类型的APP同样也会遭到性能限制,对此还有专业人士提取分享出了10000个被三星GOS服务进行能性限制的APP名单,引发了很大的争议。

近日,三星在其官网上针对上述 质疑进行了回应,以自问自答的形式回答了一些公众所关注的焦点问题。

三星表示,其GOS服务的目的是用于监控手机的运行状态,以防止设备运行 游戏 类应用时,出现卡顿、性能大幅下降和功耗增大,导致手机过热等问题。该服务仅 适用于运行高负荷的大型 游戏 ,不适用于、不会影响到除 游戏 之外的一般应用。

针对专业人士从其GOS服务数据库中提取出来的,会被限制性能的10000个应用名单一事,三星回应称“这个列表的目的仅仅是为了快速判断用户所新安装的应用是否为 游戏 ,与GOS服务本身无关”。

也就是说,并非所有纳入GOS服务名单中的应用都会被限制性能,这个名单并非是“黑名单”。

对于跑分测试软件为什么没有被加入GOS服务名单的质疑,三星称GOS服务主要针对的是大型 游戏 ,而跑分测试软件不是 游戏 类应用,不会长时间运行,导致手机过热的可能性不大,因此没有被纳入GOS服务控制调节的范围内。

如果开启性能优先模式, 游戏 体验会有多大的提升?三星称,这可以解锁CPU和GPU的性能限制,在某些 游戏 中大概会提升10帧左右,但不推荐这样做。

最后一个问题最为关键,那就是如果用户启用性能优先模式,由此导致手机过热出问题,会不会影响到三星所提供的免费维修服务?

三星表示不影响,性能优先模式也是三星向用户提供的一项功能,如果设备出现问题且在保修期内的话,就可以享受免费的售后服务。

三星表示将继续对这项服务进行改善、优化。

注:图三来自三星官网,原文为韩文,为方便读者阅读理解,使用机器翻译,仅供参考。

请先在华为应用市场下载华为游戏中心和HMSCore(华为移动服务),并从华为游戏中心下载对应游戏。

华为游戏中心下载方法:在浏览器中打开链接:应用市场,下载安装华为游戏中心最新版本(如系统提示下载华为应用市场时请优先安装),并从华为游戏中心下载安装对应游戏,即可使用华为帐号登录游戏。

HMSCore(华为移动服务)下载方法:

1打开设备自带的应用市场/商店,搜索找到HMSCore,直接下载安装。

2若设备自带的应用市场/商店搜索不到HMSCore,您可以先搜索并安装华为应用市场App,再在华为应用市场App中搜索并安装HMSCore。

3若设备自带的应用市场/商店也搜索不到华为应用市场App,您可以通过浏览器访问华为应用市场网页版,下载并安装华为应用市场App,再在华为应用市场App中搜索并安装HMSCore。

4IOS系统无法下载HMSCore(华为移动服务)和华为游戏中心,所以无法玩华为渠道的游戏。

当使用三星手机玩游戏时,游戏助推器会学习你的使用模式,并在性能和温度之间达到平衡,但有些小伙伴不喜欢界面上的提示。那三星游戏助推器怎么关闭?

三星游戏助推器怎么关闭?

1、滑出手机通知栏,点击右上角的搜索图标。

2、输入关键词“游戏助推器”,并点击进入。

3、点击右下角“强制停止”即可。

本文以三星S20为例适用于One UI 20系统

欢迎分享,转载请注明来源:品搜搜测评网

原文地址:https://pinsoso.cn/shuma/1301588.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-09-12
下一篇2023-09-12

随机推荐

  • 请专家帮我恶补下品牌知识

    据我所知钟表品牌 Rolex劳力士 Longines浪琴 Citizen西铁城 Tudor帝陀表 Omega欧米茄 vc江诗丹顿 Casio卡西欧 CK卡尔文·克莱恩是个内衣品牌gucci是意大利的箱包品牌珠宝有 Tiffany蒂芙尼 Ca

    2024-04-15
    1029500
  • 白松露眼霜什么功效

    我来告诉你白松露眼霜的功效啦~首先,白松露作为一种稀有及昂贵的食材,其精华能够深入肌肤,提供持久的滋润保湿效果,不仅可以令肌肤变得柔嫩细腻,还能够淡化细纹,提升肌肤弹性,使肌肤显得更加年轻动人。而眼周皮肤最细最娇嫩,其肌肤也很容易出现干燥,

    2024-04-15
    1043800
  • 那个牌子的护手霜好用啊

    1、凡士林护手霜。凡士林润肤露改善肌肤干燥功效显著,凡士林是享誉全球的原创专业护肤品牌之一。 2、欧舒丹护手霜。法国天然植物护肤品牌,专门制造及售卖个人护理产品及家居产品的国际零售企业,其护手霜享誉界内。 3、露得清护手霜。强生旗下高效护肤

    2024-04-15
    46000
  • 有没有适合女生用的护肤品,油性皮肤,套装的?

    呼吸惊喜水分套盒SU:M37呼吸惊喜水分补水保湿三件套套盒,主要功效:给肌肤高效供应补充水分,保湿,镇定和收缩毛孔成分:竹子树液、红三叶草花、木槿花、金银花 使用感受:化妆水是轻薄的水状 啫喱是凝露质地 气味清新不像雪

    2024-04-15
    39600
  • 男士用什么牌子的保湿乳液好?

    据我了解的情况,现在好像有更多的男生对于护肤不是很抵触了,虽不抵触,但是却不会挑选合适自己的男士水乳,不过没事的,首先有这个心态的转变就是好事呢,不会挑选没关系的,我用的多,我可以给大家分享一下我的使用心得,我用过的一些男士水乳,有些平价好

    2024-04-15
    35900
  • 精华露和精华乳液先用哪个

    一般来说,精华露和精华乳液的使用顺序是先使用精华露,再使用精华乳液。精华露是一种比较轻盈的质地,通常含有高浓度的活性成分,用于深层滋润皮肤。而精华乳液则是一种更滋润的质地,可以提供长效的保湿效果。然而,这并不代表在洁面后必须立即使用精华露,

    2024-04-15
    37700
  • 淡斑精华液排行榜10强品牌有哪些

    2019已经过了大半,这一年,无数新功能新类型的精华产品又席卷了护肤圈。精华产品是护肤品中浓度高、效果明显的单品,明白如何正确选择和使用精华液,护肤效果就事半功倍,今天为大家悉心总结2019美白淡斑精华液排行榜10强,从平价到贵妇,总有一款

    2024-04-15
    37100

发表评论

登录后才能评论
保存