我一直在尝试使用F#创建自托管应用程序服务器。我已经成功启动了应用程序服务器,并且可以使用C#客户端进行连接,但是我想要做的一些事情更适合使用F#。问题是我似乎无法使F#客户端正常工作。我找到了一些例子,但是似乎没有一个能够正常运行。最有希望的是这里。根据该示例,我编写了以下代码:
let address= new EndpointAddress("net.tcp://192.168.101.100:2009/PrevisionService/tcp")
let factory = new ChannelFactory<IPrevisionAppServer>("NetTcpBinding_IPrevisionAppServer", address)
let channel = factory.CreateChannel()//address)
let GetDataObject (sql) = channel.GetDataObject(sql)
factory.Close()
但我遇到了以下错误:
在ServiceModel客户端配置部分未找到名称为'NetTcpBinding_IPrevisionAppServer'、合同为'PrevisionAppServer.Main+IPrevisionAppServer'的终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为在客户端元素中找不到与此名称匹配的终结点元素。
我有一个app.config文件,在C#中它也很好用:
<?xml version="1.0" encoding="utf-8"?>
<!--Client Config-->
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IPrevisionAppServer" closeTimeout="00:01:00"
openTimeout="00:20:00" receiveTimeout="01:00:00" sendTimeout="01:00:00"
hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://192.168.101.100:2009/PrevisionService/tcp" behaviorConfiguration="ServiceViewEventBehavior"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IPrevisionAppServer"
contract="*" name="NetTcpBinding_IPrevisionAppServer">
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="ServiceViewEventBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>`
出于某种原因,它似乎忽略了app.config文件。有什么想法吗?有更好的代码可以让它工作吗?任何建议都将不胜感激!
更新:好吧,我感觉很蠢,但我没有注意到我在一个测试客户端中运行这个程序,该客户端也有一个C# UI作为启动项,因此app.config位于C#项目中。所以,现在的问题是,如何将C# app.config应用于F#项目(我需要这样做)?也就是说,我真的不想编写所有从应用程序设置到代码的属性获取和设置的代码。有什么想法?
[program files]\fsharp-version\bin\fsi.exe
下执行。您可以修改fsi.exe.config并在其中获取配置值,但这是一个全局文件,在自定义安装方案中不容易修改 - 最好修改machine.config :(. 有关更多信息,请参见此问题。 - Randolpho