2017-02-14 3 views
0

私はWCFサービスで "BluetoothLEAdvertisementWatcher" を使用したいC#の - Windows.winmdを使用してWCFサービスで

public override void StartWathchingAsync() 
     { 
      BluetoothLEAdvertisementWatcher BluetoothWatcher = new BluetoothLEAdvertisementWatcher(); 
     } 

しかし、私は "BluetoothLEAdvertisementWatcher" のインスタンスを作成するとき、私は

Error Image

下のエラーが出ます

mscorlib.dllで 'System.ServiceModel.FaultException`1'の未処理例外が発生しました

追加情報:パラメーターが正しくありません。 ( HRESULTからの例外:0x80070057が(E_INVALIDARG))

アンExceptionDetail、おそらくその値が真 IncludeExceptionDetailInFaults =、作成者: System.ArgumentExceptionの:パラメータが間違っています。 CでMeasuringDeviceService.DeviceService.GetDataで MeasuringDeviceService.MeasuringDeviceClasseis.XiaomiMiScale.StartWathchingAsync(で) (MeasuringDevice measuringDevice):(0x80070057が(E_INVALIDARG) HRESULTからの例外):\ユーザーは\ MahdKodak \プログラマー\デスクトップ\プロジェクト MahdKodakを\しますMeasuringDeviceService \ DeviceService.svc.cs:Cで MeasuringDeviceService.DeviceService.GetDataXiaomiMiScale(xiaomiMiScale xiaomiMiScale)でのライン 37:\ユーザーは MahdKodak \ MahdKodak \ MeasuringDeviceService \ DeviceService.svc.csプログラマー\デスクトップ\プロジェクト\:ライン 25 SyncInvokeGetDataXiaomiMiScale(Object、Object []、Object []) at System.ServiceModel.Dispatcher.SyncMethodInvoker。 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc & RPCでSystem.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc & RPC)で([] &出力オブジェクト、[]入力オブジェクト、オブジェクト インスタンス)を呼び出します) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpcで System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc & RPC)で System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc & RPC)で System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11でSystem.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc & RPC)で System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc & RPC)(AT RPC) System.ServiceModel.Dispatcher.MessageRpcで System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc & RPC)でMessageRpc & RPC)。プロセス(ブール isOperationContextSet)

そして、私は以下のコード行をコメント、私のプログラムの作業も

//BluetoothLEAdvertisementWatcher BluetoothWatcher = new BluetoothLEAdvertisementWatcher(); 

EDIT:

これは私のコード

サービスですコード:

public class DeviceService : IDeviceService 
    { 
     Semaphore DeviceSemaphor = null; 
     public DeviceService() 
     { 
      DeviceSemaphor = new Semaphore(1, 1); 
     } 
     public XiaomiMiScaleData GetDataXiaomiMiScale(XiaomiMiScale xiaomiMiScale) 
     { 
      return GetData(xiaomiMiScale) as XiaomiMiScaleData; 
     } 

     public MeasuringDeviceData GetData(MeasuringDevice measuringDevice) 
     { 
      try 
      { 
       measuringDevice.StartWathchingAsync(); 
       return measuringDevice.LastData; 
      } 
      catch (Exception ex) 
      { 
       return null; 
      } 
     } 
    } 

他のクラス:どこかの例外がスローされるように引き起こしているMeasuringDeviceService.DeviceService.GetData(MeasuringDevice measuringDevice)で

[DataContract] 
    public class MeasuringDevice 
    { 
     [DataMember] 
     public MeasuringDeviceData LastData { get; set; } 
     public MeasuringDevice() 
     { 
     } 
     [DataMember] 
     public ulong DeviceBluetoothAddress { get; set; } 
     public virtual void StartWathchingAsync() 
     { 

     } 
    } 

[DataContract] 
    public class XiaomiMiScale : MeasuringDevice 
    { 
     public XiaomiMiScale() 
     { 
      LastData = new XiaomiMiScaleData(); 
     } 

     public override void StartWathchingAsync() 
     { 
      BluetoothLEAdvertisementWatcher BluetoothWatcher = new BluetoothLEAdvertisementWatcher(); 
     } 
    } 
+0

例外の原因となるコード行がメソッドに1行しかない場合は、もちろんコメント行のときにメソッドがうまく動作します。 BluetoothLEAdvertisementWatcherコンストラクタにコンストラクタパラメータが必要かどうかチェックしましたか? APIにアクセスできますか、コード全体を投稿することができますか? – Ayusman

答えて

0

問題はどちらかである(MeasuringDeviceService.MeasuringDeviceClasseis.XiaomiMiScale.StartWathchingAsyncの場合)または。

上記のコードがWCFサービス内で実行されているため、エラーが発生した場合、FaultExceptionを使用して例外がクライアントに返されているためです。

私はあなたのコードやシステムについてはわかりませんが、私はまずDeviceService.GetData()が何をしているのか、それをスタンドアローンで動作させる方法を理解する必要があります。

EDIT:BluetoothLEAdvertisementWatcherを実行してください。BluetoothWatcher = new BluetoothLEAdvertisementWatcher(); WCFの領域外でスタンドアロンの方法で呼び出します。

これを実行すると、期待どおりに機能しますか?サーバー側にブレークポイントを設定し、例外がスローされていることを正確に見て、コールスタックを貼り付けることはできますか?

+0

ありがとう コンソールアプリケーションでテストしてもうまく動作します 私は自分の問題のGifを作成しました [link](https://i.stack.imgur.com/AeMhS.gif) –

+0

私にはアクセスできませんソースコードですが、次のようなものを試してみてください: new BluetoothLEAdvertisementWatcher {ScanningMode = BluetoothLEScanningMode.Active};ウォッチャー。スタート(); –

+0

解決されていません メタデータについてこの[link](http://stackoverflow.com/questions/5221692/wcf-service-host-cannot-find-any-service-metadata)が見つかりました それは関係がありますか? –

関連する問題