Сервис может иметь несколько конечных точек?

Я заметил, что Internet Explorer 11 становится невероятно медленным, когда вырезаете данные, подобные jeremy. Это верно для Chrome, но у IE возникает проблема при передаче разрезанных данных в Blob-Constructor. На моей машине, передавая 5 МБ данных, происходит сбой в IE, а потребление памяти идет через крышу. Chrome быстро создает blob.

Запустите этот код для сравнения:

var byteArrays = [],
    megaBytes = 2,
    byteArray = new Uint8Array(megaBytes*1024*1024),
    block,
    blobSlowOnIE, blobFastOnIE,
    i;

for (i = 0; i < (megaBytes*1024); i++) {
    block = new Uint8Array(1024);
    byteArrays.push(block);
}

//debugger;

console.profile("No Slices");
blobSlowOnIE = new Blob(byteArrays,  { type: 'text/plain' });
console.profileEnd();

console.profile("Slices");
blobFastOnIE = new Blob([byteArray],  { type: 'text/plain' });
console.profileEnd();

Поэтому я решил включить оба метода, описанные jeremy в одну функцию. Кредиты идут к нему за это.

function base64toBlob(base64Data, contentType, sliceSize) {

    var byteCharacters,
        byteArray,
        byteNumbers,
        blobData,
        blob;

    contentType = contentType || '';

    byteCharacters = atob(base64Data);

    // Get blob data sliced or not
    blobData = sliceSize ? getBlobDataSliced() : getBlobDataAtOnce();

    blob = new Blob(blobData, { type: contentType });

    return blob;


    /*
     * Get blob data in one slice.
     * => Fast in IE on new Blob(...)
     */
    function getBlobDataAtOnce() {
        byteNumbers = new Array(byteCharacters.length);

        for (var i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }

        byteArray = new Uint8Array(byteNumbers);

        return [byteArray];
    }

    /*
     * Get blob data in multiple slices.
     * => Slow in IE on new Blob(...)
     */
    function getBlobDataSliced() {

        var slice,
            byteArrays = [];

        for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
            slice = byteCharacters.slice(offset, offset + sliceSize);

            byteNumbers = new Array(slice.length);

            for (var i = 0; i < slice.length; i++) {
                byteNumbers[i] = slice.charCodeAt(i);
            }

            byteArray = new Uint8Array(byteNumbers);

            // Add slice
            byteArrays.push(byteArray);
        }

        return byteArrays;
    }
}
7
задан Peter Mortensen 25 January 2012 в 21:29
поделиться

3 ответа

Сервис может иметь несколько конечных точек в единственном хосте, но каждая конечная точка должна иметь уникальную комбинацию адреса, связывая и контракта. Для размещенного IIS сервиса (то есть.SVC файл), просто устанавливает адрес конечной точки к относительному URI и удостоверяются, что Ваша Visual Studio или сгенерированный клиент wsdl.exe указывают имя конечной точки в своем конструкторе.

См. также статью MSDN Несколько Конечных точек.

6
ответ дан 6 December 2019 в 14:12
поделиться

У Вас может быть несколько конечных точек, определенных или на сервере или на клиенте.

Чтобы сделать это на клиенте, просто необходимо отредактировать app.config файл с новой конечной точкой с другим именем, затем определить при создании нового клиента.

Например, если у Вас есть конечная точка в Вашем клиентском приложении как:

<endpoint address="https://yourdomain.com/WCF/YourService.svc"
      binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IYourService"
      contract="MessagingService.IYourService"  
      name="BasicHttpBinding_IYourService" />

Которым Вы звоните:

YourServiceClient client = new YourServiceClient();

Можно добавить новую конечную точку с новым именем:

<endpoint address="https://yourotherdomain.com/WCF/YourService.svc"
      binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IYourService"
      contract="MessagingService.IYourService"  
      name="BasicHttpBinding_IYourService_ENDPOINT2" />

С которым можно звонить:

YourServiceClient client = new YourServiceClient("BasicHttpBinding_IYourService_ENDPOINT2");

Я просто изменил домен выше, но если бы Вы сделали новый обязательный раздел конфигурации, то Вы могли бы просто изменить значение "bindingConfiguration".

9
ответ дан 6 December 2019 в 14:12
поделиться

Необходимо будет создать весь новый хост, если Вы будете в настоящее время использовать IIS в качестве своего хоста - IIS только поддерживает HTTP и не привязку TCP. Если однако Вы используете, БЫЛ или сервис окон, то Вы сможете сойти с рук простое создание новой net.tcp конечной точки.

0
ответ дан 6 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: