2012-01-05 3 views
0

私はすでにサービス契約を定義しており、その操作は実装されています。これは私が実装したサービスの1つの例です。クライアントからデータを受信して​​データベースに格納するために、WCFサービスを正しく使用していますか?

public int CreateIncident(string incidentName, string location, DateTime timeStamp) 
{ 

    //Initilise db object to reference incidentDB database 
    incDBEntities db = new incDBEntities(); 

    int incId = db.Incidents.Max(i => i.incId); 

    // Create new record with incremented incident id and assigned fields 
    Incident inc = Incident.CreateIncident(++incId); 

    inc.description = incidentName; 
    inc.location = location; 
    inc.whenReported = timeStamp; 

    //Add the incident instance and save changes/updates made to database 
    db.AddToIncidents(inc); 
    db.SaveChanges(); 

    return inc.incId; 
} 

クライアントは、このサービスをデータとして引数として呼び出します。

引数をデータフィールドに割り当てて、データをデータベースに格納することはできますか? 現時点では、WCFテストクライアントを使用してデータをローカルに送信し、データベースに格納することに成功しました。

私はデータ契約を定義していません。リモートクライアントがAndroidやMicrosoftのアプリケーションから電話をかけたときにサービスが動作するかどうかは分かりません。

+2

もっと具体的な質問をしてください。これはかなり曖昧です。 –

+0

さて、もっと具体的にしてみました。誰かが何らかの答えやアドバイスをくれれば感謝しています。 – Qwerty

+0

あなたのサービスにあるレベルのセキュリティを追加して、データベースに不要な挿入をしないようにしておけばOKです。 – TheBoyan

答えて

0

プリミティブ型のみをパラメータとして使用しているときにデータコントラクトを定義する必要はありません。彼らはデフォルト契約を持っているとみなされます。複合型をパラメータとして使用する場合は、複合型をDataContractにする必要があります。パラメータの数が多くなると(たとえば4以上)、関連するパラメータをグループ化する場合は、それらをカスタム型にカプセル化してDataContractにする必要があります。

1つのパラメータしか持たない場合でも、常にDataContractsを使用する人がいます。これにより、操作にパラメータを追加したいときに、後で作業を簡単にすることができます。すべての呼び出しを変更するのではなく、データコントラクトクラスに追加するだけで、サービスコントラクトインターフェイスとそれを実装するクラスが追加されます。それは個人的な好みの問題です。

データの保存に関しては、データアクセスレイヤー(incDBEntities)を、操作が呼び出されるたびにではなく、一度だけインスタンス化するクラスメンバーとして使用することができます。

+0

ああ、今私はそれを理解しています、チュートリアルとmsdnの説明は、wcfサービスで私のアプリケーションには意味がありませんでした。 – Qwerty

+0

私はWCFデータサービスを見ていましたが、それはより効率的で便利なのでしょうか? – Qwerty

+0

「WCFデータサービス」の意味がわかりません。 –

関連する問題