質問編集履歴
1
"試行内容"を追加致しました。ご確認よろしくお願い致します。
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,6 +16,14 @@
|
|
16
16
|
|
17
17
|
![![イメージ説明](1c64d47da58a7a0556d2b1c4f0458540.png)
|
18
18
|
|
19
|
+
|
20
|
+
|
21
|
+
### 進捗状況
|
22
|
+
|
23
|
+
Form1,Form2の画面の表示(インスタンスの生成)は出来ています。
|
24
|
+
|
25
|
+
|
26
|
+
|
19
27
|
### ソースコード
|
20
28
|
|
21
29
|
※フォーム1はC#、フォーム2はVBで開発しています。
|
@@ -32,12 +40,6 @@
|
|
32
40
|
|
33
41
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
34
42
|
|
35
|
-
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
36
|
-
|
37
|
-
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
38
|
-
|
39
|
-
mc:Ignorable="d"
|
40
|
-
|
41
43
|
Title="MainWindow" Height="450" Width="800">
|
42
44
|
|
43
45
|
<Grid>
|
@@ -58,14 +60,6 @@
|
|
58
60
|
|
59
61
|
```
|
60
62
|
|
61
|
-
using System.Diagnostics;
|
62
|
-
|
63
|
-
using System.ServiceModel;
|
64
|
-
|
65
|
-
using System.Windows;
|
66
|
-
|
67
|
-
|
68
|
-
|
69
63
|
namespace Form1
|
70
64
|
|
71
65
|
{
|
@@ -112,10 +106,6 @@
|
|
112
106
|
|
113
107
|
/// </summary>
|
114
108
|
|
115
|
-
/// <param name="sender"></param>
|
116
|
-
|
117
|
-
/// <param name="e"></param>
|
118
|
-
|
119
109
|
private void Button_Click(object sender, RoutedEventArgs e)
|
120
110
|
|
121
111
|
{
|
@@ -126,30 +116,20 @@
|
|
126
116
|
|
127
117
|
var message = Host.CallExecute(TextBox1.Text);
|
128
118
|
|
129
|
-
|
130
|
-
|
131
119
|
MessageBox.Show(message);
|
132
120
|
|
133
121
|
}
|
134
122
|
|
135
|
-
catch(
|
123
|
+
catch(FaultException<FailureInfo> fx)
|
136
124
|
|
137
125
|
{
|
138
126
|
|
127
|
+
FailureInfo info = fx.Detail;
|
128
|
+
|
139
|
-
MessageBox.Show(
|
129
|
+
MessageBox.Show(info.Message);
|
140
130
|
|
141
131
|
}
|
142
132
|
|
143
|
-
catch(FaultException<FailureInfo> fx)
|
144
|
-
|
145
|
-
{
|
146
|
-
|
147
|
-
FailureInfo info = fx.Detail;
|
148
|
-
|
149
|
-
MessageBox.Show(info.Message);
|
150
|
-
|
151
|
-
}
|
152
|
-
|
153
133
|
}
|
154
134
|
|
155
135
|
}
|
@@ -166,10 +146,6 @@
|
|
166
146
|
|
167
147
|
```
|
168
148
|
|
169
|
-
using System.ServiceModel;
|
170
|
-
|
171
|
-
|
172
|
-
|
173
149
|
namespace Form1
|
174
150
|
|
175
151
|
{
|
@@ -198,14 +174,6 @@
|
|
198
174
|
|
199
175
|
```
|
200
176
|
|
201
|
-
using System;
|
202
|
-
|
203
|
-
using System.Reflection;
|
204
|
-
|
205
|
-
using System.ServiceModel;
|
206
|
-
|
207
|
-
|
208
|
-
|
209
177
|
namespace Form1
|
210
178
|
|
211
179
|
{
|
@@ -238,10 +206,6 @@
|
|
238
206
|
|
239
207
|
```
|
240
208
|
|
241
|
-
using System.Runtime.Serialization;
|
242
|
-
|
243
|
-
|
244
|
-
|
245
209
|
namespace Form1
|
246
210
|
|
247
211
|
{
|
@@ -270,45 +234,9 @@
|
|
270
234
|
|
271
235
|
|
272
236
|
|
273
|
-
⑥フォーム2の
|
237
|
+
⑥フォーム2のコードビハインドクラス
|
274
|
-
|
238
|
+
|
275
|
-
```
|
239
|
+
```
|
276
|
-
|
277
|
-
<Window x:Class="MainWindow"
|
278
|
-
|
279
|
-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
280
|
-
|
281
|
-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
282
|
-
|
283
|
-
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
284
|
-
|
285
|
-
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
286
|
-
|
287
|
-
mc:Ignorable="d"
|
288
|
-
|
289
|
-
Title="MainWindow" Height="450" Width="800">
|
290
|
-
|
291
|
-
<Grid>
|
292
|
-
|
293
|
-
<TextBox x:Name="TextBox1" HorizontalAlignment="Left" Height="23" Margin="50,33,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
|
294
|
-
|
295
|
-
</Grid>
|
296
|
-
|
297
|
-
</Window>
|
298
|
-
|
299
|
-
```
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
⑦フォーム2のコードビハインドクラス
|
304
|
-
|
305
|
-
```
|
306
|
-
|
307
|
-
Imports System.ServiceModel
|
308
|
-
|
309
|
-
Imports Form1
|
310
|
-
|
311
|
-
|
312
240
|
|
313
241
|
''' <summary>
|
314
242
|
|
@@ -318,62 +246,46 @@
|
|
318
246
|
|
319
247
|
Public Class MainWindow
|
320
248
|
|
321
|
-
|
322
|
-
|
323
249
|
Public Host As ServiceHost
|
324
250
|
|
325
|
-
|
326
|
-
|
327
251
|
Public Const Uri As String = "net.pipe://localhost/Form2"
|
328
252
|
|
329
253
|
|
330
254
|
|
255
|
+
Public Sub New()
|
256
|
+
|
257
|
+
Host = New ServiceHost(GetType(WcfClient))
|
258
|
+
|
259
|
+
Host.AddServiceEndpoint(
|
260
|
+
|
261
|
+
GetType(IWcfClient),
|
262
|
+
|
263
|
+
New NetNamedPipeBinding(NetNamedPipeSecurityMode.None),
|
264
|
+
|
265
|
+
New Uri(Uri))
|
266
|
+
|
267
|
+
Host.Open()
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
InitializeComponent()
|
272
|
+
|
273
|
+
End Sub
|
274
|
+
|
275
|
+
|
276
|
+
|
331
277
|
''' <summary>
|
332
278
|
|
333
|
-
'''
|
279
|
+
''' テキストボックスに値をセットする
|
334
280
|
|
335
281
|
''' </summary>
|
336
282
|
|
337
|
-
Public Sub New()
|
338
|
-
|
339
|
-
Host = New ServiceHost(GetType(WcfClient))
|
340
|
-
|
341
|
-
Host.AddServiceEndpoint(
|
342
|
-
|
343
|
-
GetType(IWcfClient),
|
344
|
-
|
345
|
-
New NetNamedPipeBinding(NetNamedPipeSecurityMode.None),
|
346
|
-
|
347
|
-
New Uri(Uri))
|
348
|
-
|
349
|
-
Host.Open()
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
InitializeComponent()
|
354
|
-
|
355
|
-
End Sub
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
''' <summary>
|
360
|
-
|
361
|
-
''' テキストボックスに値をセットする
|
362
|
-
|
363
|
-
''' </summary>
|
364
|
-
|
365
|
-
''' <param name="text"></param>
|
366
|
-
|
367
|
-
''' <returns></returns>
|
368
|
-
|
369
283
|
Public Function Reply(ByVal text As String) As String
|
370
284
|
|
371
285
|
// テキストボックスにフォーム1より受け取った値をセット
|
372
286
|
|
373
287
|
TextBox1.Text = text
|
374
288
|
|
375
|
-
|
376
|
-
|
377
289
|
Return "Form2 Replyメソッドが呼ばれました"
|
378
290
|
|
379
291
|
End Function
|
@@ -384,9 +296,173 @@
|
|
384
296
|
|
385
297
|
|
386
298
|
|
387
|
-
###
|
388
|
-
|
389
|
-
Fa
|
299
|
+
### 試行内容
|
300
|
+
|
301
|
+
「④サービスの具象クラス」を以下のようにFacadeを用い、呼び出すアセンブリ・クラス・メソッドを動的に指定出来るように書き替え、Form1からForm2へプロセス間通信を実行しました。
|
302
|
+
|
303
|
+
```
|
304
|
+
|
305
|
+
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
|
306
|
+
|
307
|
+
public class WcfClient: IWcfClient
|
308
|
+
|
309
|
+
{
|
310
|
+
|
311
|
+
public string CallExecute(string text)
|
312
|
+
|
313
|
+
{
|
314
|
+
|
315
|
+
// Facadeを用いてForm2のReplyメソッドをコール
|
316
|
+
|
317
|
+
return Facade<string>("Form2.exe", "Form2.MainWindow", "Reply", text);
|
318
|
+
|
319
|
+
}
|
320
|
+
|
321
|
+
private T Facade<T>(string assembly, string className, string methodName, string text = "")
|
322
|
+
|
323
|
+
{
|
324
|
+
|
325
|
+
string path = Environment.CurrentDirectory + @"\" + assembly;
|
326
|
+
|
327
|
+
Assembly asm = Assembly.LoadFrom(path);
|
328
|
+
|
329
|
+
object obj = asm.CreateInstance(className);
|
330
|
+
|
331
|
+
Type type = obj.GetType();
|
332
|
+
|
333
|
+
MethodInfo mi = type.GetMethod(methodName);
|
334
|
+
|
335
|
+
object[] param = new object[1];
|
336
|
+
|
337
|
+
param[0] = text;
|
338
|
+
|
339
|
+
object returnObj = mi.Invoke(obj, param);
|
340
|
+
|
341
|
+
return (T)returnObj;
|
342
|
+
|
343
|
+
}
|
344
|
+
|
345
|
+
}
|
346
|
+
|
347
|
+
}
|
348
|
+
|
349
|
+
```
|
350
|
+
|
351
|
+
上記を実行した結果、以下のスタックトレースが出力されました。
|
352
|
+
|
353
|
+
```
|
354
|
+
|
355
|
+
System.ServiceModel.FaultException
|
356
|
+
|
357
|
+
HResult=0x80131501
|
358
|
+
|
359
|
+
Message=内部エラーのため、クライアントは要求を処理できませんでした。このエラーの詳細については、例外情報をクライアントに返信するためにサーバーで IncludeExceptionDetailInFaults を有効にするか (ServiceBehaviorAttribute または <serviceDebug> 構成動作を通じて)、Microsoft .NET Framework SDK ドキュメントに従ってトレースを有効にして、サーバーのトレース ログを調べてください。
|
360
|
+
|
361
|
+
Source=mscorlib
|
362
|
+
|
363
|
+
スタック トレース:
|
364
|
+
|
365
|
+
場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
|
366
|
+
|
367
|
+
場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
|
368
|
+
|
369
|
+
場所 Form1.IWcfClient.CallExecute(String text)
|
370
|
+
|
371
|
+
場所 Form1.MainWindow.Button_Click(Object sender, RoutedEventArgs e) (C:\workspace\20191020\WcfConnection\Form1\MainWindow.xaml.cs):行 34
|
372
|
+
|
373
|
+
場所 System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
|
374
|
+
|
375
|
+
場所 System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
|
376
|
+
|
377
|
+
場所 System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
|
378
|
+
|
379
|
+
場所 System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
|
380
|
+
|
381
|
+
場所 System.Windows.Controls.Primitives.ButtonBase.OnClick()
|
382
|
+
|
383
|
+
場所 System.Windows.Controls.Button.OnClick()
|
384
|
+
|
385
|
+
場所 System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
|
386
|
+
|
387
|
+
場所 System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
|
388
|
+
|
389
|
+
場所 System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
|
390
|
+
|
391
|
+
場所 System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
|
392
|
+
|
393
|
+
場所 System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
|
394
|
+
|
395
|
+
場所 System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
|
396
|
+
|
397
|
+
場所 System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
|
398
|
+
|
399
|
+
場所 System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
|
400
|
+
|
401
|
+
場所 System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
|
402
|
+
|
403
|
+
場所 System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
|
404
|
+
|
405
|
+
場所 System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
|
406
|
+
|
407
|
+
場所 System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
|
408
|
+
|
409
|
+
場所 System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
|
410
|
+
|
411
|
+
場所 System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
|
412
|
+
|
413
|
+
場所 System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
|
414
|
+
|
415
|
+
場所 System.Windows.Input.InputManager.ProcessStagingArea()
|
416
|
+
|
417
|
+
場所 System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
|
418
|
+
|
419
|
+
場所 System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
|
420
|
+
|
421
|
+
場所 System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
|
422
|
+
|
423
|
+
場所 System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
|
424
|
+
|
425
|
+
場所 System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
|
426
|
+
|
427
|
+
場所 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
|
428
|
+
|
429
|
+
場所 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
|
430
|
+
|
431
|
+
場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
|
432
|
+
|
433
|
+
場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
|
434
|
+
|
435
|
+
場所 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
|
436
|
+
|
437
|
+
場所 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
|
438
|
+
|
439
|
+
場所 MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
|
440
|
+
|
441
|
+
場所 System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
|
442
|
+
|
443
|
+
場所 System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
|
444
|
+
|
445
|
+
場所 System.Windows.Application.RunDispatcher(Object ignore)
|
446
|
+
|
447
|
+
場所 System.Windows.Application.RunInternal(Window window)
|
448
|
+
|
449
|
+
場所 System.Windows.Application.Run(Window window)
|
450
|
+
|
451
|
+
場所 System.Windows.Application.Run()
|
452
|
+
|
453
|
+
場所 Form1.App.Main()
|
454
|
+
|
455
|
+
```
|
456
|
+
|
457
|
+
調べたところ、FaultExceptionの実行例外の詳細をクライアント側で取得するためには⑤のようなデバッグ追跡用のデータクラスが必要であったため、「FailureInfoクラス」を新規作成しました。
|
458
|
+
|
459
|
+
そしてプロセス間通信の実行例外(FaultException)のスタックトレースを確認するため「④サービスの具象クラス」のように書き換えました。
|
460
|
+
|
461
|
+
|
462
|
+
|
463
|
+
### 質問内容
|
464
|
+
|
465
|
+
「④サービスの具象クラス」でFaultExceptionをスローし、プロセス間通信の実行例外のスタックトレースを確認した結果、以下が出力されました。
|
390
466
|
|
391
467
|
自身で調査しましたが、真因が追求出来ていません。解決策をご存知の方いらっしゃいましたらご教授お願い致します。
|
392
468
|
|