1

http API を使用して Bing Translation サービスを実装しています。実装中に 2 つの問題に遭遇しましたが、何時間にもわたる調査の結果、まだ解決できていません。誰かが私に少しのガイダンスを提供してくれることを願っています。

問題:

1) Web サービスに送信された最初のページは、ほぼ完全に翻訳されています。ただし、最初のページがレンダリングされた後、サーバーへの後続の呼び出しは最初の呼び出しからの応答を受け取ります。つまり、html 文字列はサービスに正しく送信されますが、サービスは、新しい要求に対する期待される新しい応答ではなく、元の要求に対する元の応答を返します (サービスが要求をキャッシュしている可能性がありますか?)。

2) Javascript は内部の html と同様に翻訳されます:-/ 以下の例を参照してください:

Javascript(翻訳:-/)

$(función () {}

elformulario var document.forms['ctl01 ='];

Si (typeof(Sys) == 'undefined') tira Error nuevo ('ASP NET Ajax client-side fram...  

My Translation クラス (Web サービス呼び出し)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Configuration;
using System.Web;
using System.Web.Script.Serialization;
using System.Net;
using System.IO;
using System.Runtime.Serialization.Json;
using Services.Config;
using Services.Models;


namespace Services
{
    public class TranslationService
    {
        private readonly RegisterServicesSection _config;
        private readonly Service _btsrv;

        public TranslationService()
        {
            _config = (RegisterServicesSection)ConfigurationManager.GetSection("registerServicesSection");
            if (_config != null)
            {
                foreach (var item in _config.Services)
                {
                    _btsrv = (Service)item;
                    if (_btsrv.Title == "BingTranslator")
                        break;
                }
            }
        }

        public string GetAuthToken()
        {
            string response;
            _btsrv.AuthRequest = string.Format(_btsrv.AuthRequest, HttpUtility.UrlEncode(_btsrv.ClientId), HttpUtility.UrlEncode(_btsrv.ClientSecret));
            try
            {
                //Create Web Client
                var web = new WebClient();
                //Set Web Client Encoding
                web.Encoding = Encoding.UTF8;
                //Get response from Web Client request
                response = web.UploadString(_btsrv.AuthUrl, _btsrv.AuthRequest);
            }
            catch (Exception ex)
            {
                return null;
            }

            //Create Javasrcipt Object Serializer
            var ser = new JavaScriptSerializer();
            //Deserialize response into token poco object
            var token = ser.Deserialize<BingAuthToken>(response);
            if (token != null)
                return token.access_token;
            else
                return null;


        }
        public string Post(string text, string fromCulture, string toCulture)
        {

            string response;
            try
            {
                var accessToken = GetAuthToken();
                if (accessToken == null)
                    return null;

                //Create Web Client
                var web = new WebClient();
                //Set Web Client Authorization Headers
                web.Headers.Add("Authorization", "Bearer " + accessToken);
                //Get UrlEncoded Post Parameters from Web.config
                _btsrv.Request = String.Format(_btsrv.Request, HttpUtility.UrlEncode(text), fromCulture, toCulture, HttpUtility.UrlEncode(_btsrv.ContentType));
                //Set Web Client Encoding
                web.Encoding = Encoding.UTF8;
                //Get response from Web Client Request
                response = web.DownloadString(_btsrv.Url + _btsrv.Request);

            }
            catch (Exception ex)
            {
                return null;
            }
            //Create xml document to load Web Client response
            var doc = new XmlDocument();
            //Load Web Client response
            doc.LoadXml(response);
            //Return Web Client response string
            return doc.DocumentElement.InnerText;            
        }
    }
}

マイページのレンダリング呼び出し:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using Services;

namespace TestTranslation
{
    public class CustomPage: Page
    {
        private TranslationService _tsrv = new TranslationService();

        protected override void Render(HtmlTextWriter writer)
        {
            using (StringWriter output = new StringWriter())
            {
                base.Render(new HtmlTextWriter(output));
                //This is the rendered HTML of your page.
                string outputAsString = output.ToString();
                outputAsString = _tsrv.Post(outputAsString, "en", "es");
                writer.Write(outputAsString);
                output.Close();
                writer.Close();
                writer.Dispose();
            }            
        }
    }
}

vs2012 でデフォルトの Web フォーム テンプレートを使用しています。このアーキテクチャについて間違った方法で行っている可能性があり、以前にこのサービスを実装しようとしたことがありません。どんな助けでも大歓迎です!!!!

4

1 に答える 1

0

以下に説明するこれらの問題を解決しました。

1)構成オブジェクトのプロパティをさまざまなデータで自分自身に再割り当てしようとした私自身の責任。これにより、以前のサービス呼び出しのデータを保持するように構成ファイルが設定されました。同じデータを解析し、新しいデータとして返すようにします。

2) 私の考えでは、不正な形式の html スクリプト タグを渡すと変換されます。また、Web サービス呼び出しの構成では、コンテンツ タイプ パラメータを「text/html」に設定する必要があることに注意してください。

これが将来誰かに役立つことを願っています。

ありがとう!

于 2013-09-25T15:43:44.700 に答える