Пример использования ADO.NET с Oracle в WCF - PullRequest
0 голосов
/ 23 июня 2011

Без каких-либо Linq или Entity Framework я хотел бы увидеть пример использования ADO.NET с Oracle в WCF.Я видел ABC и различные контракты, но, скажем, с использованием службы Restful WCF, отправляющей в 1 несколько параметров, я хотел бы увидеть пример использования этого типа кода:

            connection = new OracleConnection(EnvironmentSettings.connectionString);
            connection.Open();

            command = new OracleCommand("H16.WEB_FACILITY.get_facility_info", connection);
            command.CommandType = CommandType.StoredProcedure;

            // Input Parameters
            command.Parameters.Add("pfcode", OracleDbType.Varchar2, facilityCode, ParameterDirection.Input);
            // Output Parameters
            command.Parameters.Add("pfacility", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

            adapter = new OracleDataAdapter(command);
            DataSet ds = new DataSet();
            adapter.Fill(ds);

Так что яможет делать операции CRUD будет дизайн хорошей практики WCF.Контракты о сбоях / контракты на данные и т.д. ... Я вижу много примеров, но не относящихся к чему-то, что кажется таким простым.Я думаю, именно поэтому так много людей все еще делают asmx ... Я хочу преобразовать проект, в котором я нахожусь, и я вижу везде множество веб-сервисов asmx и хочу, чтобы эксперт или кто-то, кто сделал это, указал мнеправильное направление или даже лучше покажи мне, как записать этот код ADO в WCF ... Заранее спасибо.

1 Ответ

1 голос
/ 23 июня 2011

Немного озадачен относительно того, что именно вы имеете в виду, но Linq и EntityFramework не имеют ничего общего с WCF, и парадигма их использования не меняется.Вы можете сделать что-то простое:

[ServiceContract]
public class MyService
{

    [OperationContract]
    public DataSet LoadData(string facilityCode)
    {
        command = new OracleCommand("H16.WEB_FACILITY.get_facility_info", connection);
        command.CommandType = CommandType.StoredProcedure;

        // Input Parameters
        command.Parameters.Add("pfcode", OracleDbType.Varchar2, facilityCode, ParameterDirection.Input);
        // Output Parameters
        command.Parameters.Add("pfacility", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

        adapter = new OracleDataAdapter(command);
        DataSet ds = new DataSet();
        adapter.Fill(ds);

        return ds;
    }

}

На практике вы, вероятно, захотите использовать класс [DataContract] и вернуть его вместо DataSet, но единственное реальное изменение будетчитать ваши результаты в реальный класс вместо DataSet, что-то вроде:

[DataContract]
public class MyData
{
    [DataMember]
    public string Facility { get; set; }
}

Тогда ваш сервисный метод возвращает, что вместо DataSet:

[OperationContract]
public MyData LoadData(string facilityCode)
{
    MyData data;
    // read from Oracle into data object...
    return data;
}

Вы также можетепосмотрите Поток транзакций WCF , чтобы управлять областью транзакций вашей базы данных.Это хороший способ сделать так, чтобы каждая операция службы WCF была захвачена в своей собственной области транзакции или даже при необходимости управляла транзакцией из клиента WCF.


[FaultContract] s являются предметом самостоятельно, но вы можете найти несколько хороших примеров, если вы Google для этого.Обычно вы устанавливаете свой собственный тип исключения, а затем добавляете его в службу, например:

[ServiceContract]
[FaultContract(typeof(MyException))]
public class MyService

, и это говорит WCF добавить информацию о сериализации для MyException в WSDL, чтобы ваши операции могли throw new MyException(); и он будет сериализован обратно клиентам, чтобы они получили ваше исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...