Skip to content

Commit e6fd1f3

Browse files
committed
Add NetTcp to Windows Service
1 parent 062f68e commit e6fd1f3

File tree

4 files changed

+66
-72
lines changed

4 files changed

+66
-72
lines changed

Basic/Services/Hosting/WindowsService/Client/Client.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,16 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11+
<Using Include="CoreWcf.Samples.WindowsService" />
12+
<Using Include="System.ServiceModel" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<PackageReference Include="System.ServiceModel.Duplex" Version="4.10.*" />
17+
<PackageReference Include="System.ServiceModel.Federation" Version="4.10.*" />
1118
<PackageReference Include="System.ServiceModel.Http" Version="4.*" />
19+
<PackageReference Include="System.ServiceModel.NetTcp" Version="4.10.*" />
20+
<PackageReference Include="System.ServiceModel.Security" Version="4.10.*" />
1221
</ItemGroup>
1322

1423
</Project>

Basic/Services/Hosting/WindowsService/Client/Connected Services/CoreWcf.Samples.WindowsService/ConnectedService.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"ExtendedData": {
33
"inputs": [
4-
"http://localhost:5000/CalculatorService/basicHttp?singleWsdl"
4+
"http://localhost:5000/CalculatorService/basicService"
55
],
66
"collectionTypes": [
77
"System.Array",

Basic/Services/Hosting/WindowsService/Client/Connected Services/CoreWcf.Samples.WindowsService/Reference.cs

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace CoreWcf.Samples.WindowsService
1111
{
1212

1313

14-
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
14+
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.1.0")]
1515
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="CoreWcf.Samples.WindowsService.ICalculatorService")]
1616
public interface ICalculatorService
1717
{
@@ -41,13 +41,13 @@ public interface ICalculatorService
4141
System.Threading.Tasks.Task<double> DivideAsync(double n1, double n2);
4242
}
4343

44-
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
44+
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.1.0")]
4545
public interface ICalculatorServiceChannel : CoreWcf.Samples.WindowsService.ICalculatorService, System.ServiceModel.IClientChannel
4646
{
4747
}
4848

4949
[System.Diagnostics.DebuggerStepThroughAttribute()]
50-
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")]
50+
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.1.0")]
5151
public partial class CalculatorServiceClient : System.ServiceModel.ClientBase<CoreWcf.Samples.WindowsService.ICalculatorService>, CoreWcf.Samples.WindowsService.ICalculatorService
5252
{
5353

@@ -58,13 +58,6 @@ public partial class CalculatorServiceClient : System.ServiceModel.ClientBase<Co
5858
/// <param name="clientCredentials">The client credentials</param>
5959
static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials);
6060

61-
public CalculatorServiceClient() :
62-
base(CalculatorServiceClient.GetDefaultBinding(), CalculatorServiceClient.GetDefaultEndpointAddress())
63-
{
64-
this.Endpoint.Name = EndpointConfiguration.BasicHttpBinding_ICalculatorService.ToString();
65-
ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
66-
}
67-
6861
public CalculatorServiceClient(EndpointConfiguration endpointConfiguration) :
6962
base(CalculatorServiceClient.GetBindingForEndpoint(endpointConfiguration), CalculatorServiceClient.GetEndpointAddress(endpointConfiguration))
7063
{
@@ -136,11 +129,6 @@ public virtual System.Threading.Tasks.Task OpenAsync()
136129
return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndOpen));
137130
}
138131

139-
public virtual System.Threading.Tasks.Task CloseAsync()
140-
{
141-
return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndClose));
142-
}
143-
144132
private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration)
145133
{
146134
if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_ICalculatorService))
@@ -152,32 +140,37 @@ private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(Endpoi
152140
result.AllowCookies = true;
153141
return result;
154142
}
143+
if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_ICalculatorService))
144+
{
145+
System.ServiceModel.NetTcpBinding result = new System.ServiceModel.NetTcpBinding();
146+
result.MaxBufferSize = int.MaxValue;
147+
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
148+
result.MaxReceivedMessageSize = int.MaxValue;
149+
result.Security.Mode = System.ServiceModel.SecurityMode.None;
150+
return result;
151+
}
155152
throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration));
156153
}
157154

158155
private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration)
159156
{
160157
if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_ICalculatorService))
161158
{
162-
return new System.ServiceModel.EndpointAddress("http://localhost:5000/CalculatorService/basicHttp");
159+
return new System.ServiceModel.EndpointAddress("http://localhost:5000/CalculatorService/basicService/CalculatorService/basicHttp");
160+
}
161+
if ((endpointConfiguration == EndpointConfiguration.NetTcpBinding_ICalculatorService))
162+
{
163+
return new System.ServiceModel.EndpointAddress("net.tcp://localhost:8089/CalculatorService/netTcp");
163164
}
164165
throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration));
165166
}
166167

167-
private static System.ServiceModel.Channels.Binding GetDefaultBinding()
168-
{
169-
return CalculatorServiceClient.GetBindingForEndpoint(EndpointConfiguration.BasicHttpBinding_ICalculatorService);
170-
}
171-
172-
private static System.ServiceModel.EndpointAddress GetDefaultEndpointAddress()
173-
{
174-
return CalculatorServiceClient.GetEndpointAddress(EndpointConfiguration.BasicHttpBinding_ICalculatorService);
175-
}
176-
177168
public enum EndpointConfiguration
178169
{
179170

180171
BasicHttpBinding_ICalculatorService,
172+
173+
NetTcpBinding_ICalculatorService,
181174
}
182175
}
183176
}
Lines changed: 37 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,40 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4-
namespace CoreWcf.Samples.WindowsService
5-
{
6-
//The service contract is defined using Connected Service "WCF Web Service", generated from the service by the dotnet svcutil tool.
7-
8-
//Client implementation code.
9-
class Client
10-
{
11-
static void Main()
12-
{
13-
// Create a client with given client endpoint configuration
14-
CalculatorServiceClient client = new CalculatorServiceClient();
15-
16-
// Call the Add service operation.
17-
double value1 = 100.00D;
18-
double value2 = 15.99D;
19-
double result = client.Add(value1, value2);
20-
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
21-
22-
// Call the Subtract service operation.
23-
value1 = 145.00D;
24-
value2 = 76.54D;
25-
result = client.Subtract(value1, value2);
26-
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
27-
28-
// Call the Multiply service operation.
29-
value1 = 9.00D;
30-
value2 = 81.25D;
31-
result = client.Multiply(value1, value2);
32-
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
33-
34-
// Call the Divide service operation.
35-
value1 = 22.00D;
36-
value2 = 7.00D;
37-
result = client.Divide(value1, value2);
38-
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
39-
40-
//Closing the client gracefully closes the connection and cleans up resources
41-
client.CloseAsync();
42-
43-
Console.WriteLine();
44-
Console.WriteLine("Press <ENTER> to terminate client.");
45-
Console.ReadLine();
46-
}
47-
}
48-
}
4+
// there is an issue in client code generation where the Security.Mode = None
5+
// override client binding with Transport Security Mode to match service definition
6+
NetTcpBinding binding = new NetTcpBinding();
7+
var endpointAddress = new EndpointAddress("net.tcp://localhost:8089/CalculatorService/netTcp");
8+
9+
CalculatorServiceClient client = new CalculatorServiceClient(binding, endpointAddress);
10+
11+
// Call the Add service operation.
12+
double value1 = 100.00D;
13+
double value2 = 15.99D;
14+
double result = client.Add(value1, value2);
15+
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
16+
17+
// Call the Subtract service operation.
18+
value1 = 145.00D;
19+
value2 = 76.54D;
20+
result = client.Subtract(value1, value2);
21+
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
22+
23+
// Call the Multiply service operation.
24+
value1 = 9.00D;
25+
value2 = 81.25D;
26+
result = client.Multiply(value1, value2);
27+
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
28+
29+
// Call the Divide service operation.
30+
value1 = 22.00D;
31+
value2 = 7.00D;
32+
result = client.Divide(value1, value2);
33+
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
34+
35+
//Closing the client gracefully closes the connection and cleans up resources
36+
client.CloseAsync();
37+
38+
Console.WriteLine();
39+
Console.WriteLine("Press <ENTER> to terminate client.");
40+
Console.ReadLine();

0 commit comments

Comments
 (0)