契约
新建一个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系统
欢迎分享,转载请注明来源:品搜搜测评网