Мне не удалось найти дополнительную информацию об этом исключении

Моя цель: создать приложение для Windows10-64bit, которое использует Unity и dotNetRDF вместе для управления тройным хранилищем Fuseki.

  • Unity 2017.3, 64 бита
    Версия среды выполнения сценариев: экспериментальная (эквивалент .NET 4.6)
    Серверная часть сценариев: Mono
    Уровень совместимости с API: .NET 4.6

  • dotNetRFD v2.0.1
    Я сохранил все dll, связанные с net40.

«Игра» Unity состоит из одной кнопки, код которой указан ниже. Когда я запускаю игру и нажимаю кнопку, я получаю следующую ошибку:

System.InvalidOperationException: request started
at System.Net.HttpWebRequest.CheckRequestStarted () 
at System.Net.HttpWebRequest.set_Accept (System.String value) 

Код класса NewBehaviourScript, связанный с кнопкой:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OntSenseCSharpAPI;
using System;
using VDS.RDF.Query;
using VDS.RDF.Update;

public class NewBehaviourScript : MonoBehaviour {
    private  SparqlRemoteUpdateEndpoint endpoint;

    // Use this for initialization
    void Start() {
        // Start access to Sparql End Point : just one time at main method     is enough

        endpoint = new     SparqlRemoteUpdateEndpoint("http://localhost:3030/test/update");

    }

    // Update is called once per frame
    void Update() {


    }

    public void oneTriple() {
        String updateCmd =
        "PREFIX ontsense: < http://example.org/sense#> " +
        "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +
        "INSERT DATA" +
        "   {" +
        "       ontsense: dotNetRDF rdf:comment  \"dotNetRDF is a great tool.\"@en . " +
        "}";



        print(updateCmd);
        try
        {                                           // Try to access a resource.
            endpoint.Update(updateCmd);           
        }
        catch (Exception e)
        {

            print(e);                               // // Call a custom error logging procedure.
            throw;                                  // Re-throw the error. It is likely to interrupt the application
        }
    }
}  

Обратите внимание: если я создаю отдельный проект Visual Studio с пакетом dotNetRDF, взаимодействие с конечной точкой Sparql работает отлично.

На данный момент я принял решение для создания этого приложения. Итак, моя система работает с приложением, которое получает команды обновления Sparql, отправленные через сокет из Unity. Конечно, не идеальная форма, но до тех пор, пока не будет получено окончательное решение проблемы, она будет использоваться.


person H. Azevedo    schedule 29.01.2018    source источник
comment
Это похоже на ошибку низкого уровня с поддержкой HTTP в базовой среде выполнения.   -  person RobV    schedule 30.01.2018


Ответы (1)


Судя по их документам, вы должны объявить SparqlParameterizesString update = new SparqlParameterizedString();, а затем обновить его текст команды с помощью update.CommandText("...");. В этом примере они вызывают метод ToString () объекта SparqlParameterizesString, который сообщает мне, что они, вероятно, вставляют некоторую логику в строку, когда вы вызываете метод ToString (). Другими словами, не передавайте чистую строку в метод Update, и все будет в порядке.

Источник статьи: https://github.com/dotnetrdf/dotnetrdf/wiki/UserGuide-Updating-With-SPARQL

person Brandon Miller    schedule 29.01.2018
comment
Вы можете с радостью передать чистую строку, упомянутый вами класс предназначен для более сложных случаев использования, а не является требованием или фактором этой ошибки. - person RobV; 30.01.2018
comment
Привет, Брэндон. Это была хорошая попытка, но, как и предварительная версия RobV, не работает. Стоит отметить, что эта структура кода отлично работает, если она не интегрирована с инструментом Unity. То есть изолированный проект Visual Studio - person H. Azevedo; 02.02.2018
comment
Unity использует Mono, который представляет собой упрощенную версию платформы .Net. Кроме того, я почти в большинстве проектов по умолчанию использую .Net 2.0. В настройках вашего проекта должна быть опция для использования экспериментальной версии Mono .Net 4.6, но имейте в виду, что она экспериментальная и может не работать. Скорее всего, библиотека, с которой вы работаете, использует класс, не являющийся частью Mono. - person Brandon Miller; 02.02.2018