私のWCFサービスのインターフェースは次のとおりです。
[ServiceContract]
public interface IMyService
{
[OperationContract]
void DoWork();
[OperationContract]
void SendData();
[OperationContract]
void GetData();
[OperationContract]
void GetUpdate();
}
public class StateObject
{
// Client socket.
public Socket workSocket = null;
// Size of receive buffer.
public const int BufferSize = 20;
// Receive buffer.
public byte[] buffer = new byte[BufferSize];
// Received data string.
public StringBuilder sb = new StringBuilder();
}
.cs ファイルのコードは次のようになります。
public void GetUpdate()
{
StartListening();
}
public static void StartListening()
{
// Establish the local endpoint for the socket.
// The DNS name of the computer
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 1200);
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local endpoint and listen for incoming connections.
try
{
listener.Bind(localEndPoint);
listener.Listen(200);
while (true)
{
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections.
listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
}
catch (Exception e)
{
}
}
最初の問題は、タイムアウト エラーが発生することです。
TimeoutException: ' http://localhost:17263/MyService.svc 'への HTTP 要求が、割り当てられたタイムアウトの 00:01:00 を超えました。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。
2つ目のエラーです。
WebException: 操作がタイムアウトしました
これが私のものweb.config
です:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="IncreasedTimeout" sendTimeout="00:05:00" />
<binding name="BasicHttpBinding_IMyService" />
</basicHttpBinding>
</bindings>
<client>
<endpoint name="BasicHttpBinding_IMyService"
address="http://localhost:17263/MyService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IMyService"
contract="MyServiceRef.IMyService" />
</client>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
application_start() でサービスを呼び出しています
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
MyServiceRef.MyServiceClient myService = new MyServiceRef.MyServiceClient();
Thread thread = new Thread(() => myService.GetUpdate());
thread.Start();
Application["ClientObj"] = myService;
SqlDependency.Start(constr);
//trythis.connection.ReceiveData();
}
上記の問題は発生していません。今、私は史上最大の問題を抱えているので-
WCF サービス リファレンスを使用して Web アプリを実行すると、VS2015 とコンピューターがハングアップします。応答はなく、すべてがフリーズします。何も機能しません。なぜこうなった?
更新: 問題を検索したところ、システムがフリーズした理由である例外キャッチがないことがわかりました。そこで、try catch ブロックを使用しました。Web ページが表示されるようになりましたが、システムがフリーズします。応答はほぼゼロです。私は今何ができますか。TCP接続で発生することを読みましたが、どのように解決しますか?