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

随机推荐

  • 关于泰坦尼克号的十个问题

      泰坦尼克号疑问解答之 TOP10  本人的回答都是根据当今的主流观点。  第一 为什么那么大的船面对小小的冰山撞击不堪一击  专家们普遍认为,冰山撞击可能并不是致命原因;冰山撞击来得太突然,加上轮船的速度稍快,人员操作失误,再加上钢板较

    2024-04-15
    56100
  • 好用的唇膏有哪些

    1赫莲娜胶原卵白丰润密集唇霜深度滋润津润唇部,当即由内而外丰盈唇廓,淡化唇纹。独家专利成分Pro-Xfill能激起并加强细纹幼纹上层皮肤所短缺的胶原卵白IV型及胶原卵白VII型生成,重新弥补唇部因胶原流掉所造成的干涩、毁坏、凹痕和细纹。2

    2024-04-15
    54600
  • 精华液有什么作用和功效?

    01精华液,是护肤品中之极品,成分精致、功效强大、效果显著,始终保持着它拥有的高贵和神秘。含有较珍贵的功效成分,如植物提取物、神经酰胺、角鲨烷等,它的作用有防衰老、抗皱、保湿、美白、去斑等等。精华液分水剂,油剂两种,所提取的是高营养

    2024-04-15
    54100
  • nivea防晒霜怎么样_妮维雅防晒霜怎么样

    妮维雅nivea防晒霜是一款来自德国的护肤品牌,这款新防晒霜同系列防晒产品区别也会比较明显,下面我们就一起来看看效果好不好!我点评这款和一直卖的妮维雅经典防晒乳有什么区别虽然两款质地很相似,但这一款的防晒指数更高,SPF50 P

    2024-04-15
    50300
  • 美容液 精华 洁肤晶露 洗面乳 防晒霜 哪个顺序???

    先洗面乳(如果是有去角质功能的洁肤晶露,建议每周用一次,如果是温和的,与洗面乳的功能一样可以早晚用)再用精华(美容液的功能不祥细,如果与保湿乳、保湿霜的功能一样,就可以用了精华再用也可以的。)最后擦防晒霜(所有的保养过程,防晒都是最后一步)

    2024-04-15
    47200
  • 天气丹三个版本的区别

    天气丹三个版本的没有区别。虽然它们的叫法不同,但是套盒中的爽肤水和乳液在成分以及含量上都是一模一样的,所以三个版本的天气丹是不分好坏的。天气丹套盒适应的肤质比较广泛,干性肌肤使用以后能够很好的补水保湿,油性皮肤使用以后能够很好的控油祛痘,因

    2024-04-15
    49100
  • 皮肤保湿用什么最好?皮肤用什么保湿效果好?

    一般皮肤容易出油,黯淡无光,出现长痘等问题,很多时候就是因为缺水,皮肤缺水所以会分泌很多的油脂,一般来说护肤比较基础的就是做好保湿的工作,让肌肤充满水分有光泽,那么皮肤保湿用什么最好?皮肤用什么保湿效果最好呢?1、矿泉水皮肤保湿最简单也是安

    2024-04-15
    47900

发表评论

登录后才能评论
保存